我一直在寻找Perl内置函数sprintf使用的舍入约定.
我认为它进行了正常的舍入(例如在Java的舍入模式约定中的 ROUND_HALF_UP ),但挖掘进一步证明这是错误的:
> /usr/local/bin/perl5.10.1 -e 'print(sprintf("%.2f", shift @ARGV)."\n");' 0.335
0.34
> /usr/local/bin/perl5.10.1 -e 'print(sprintf("%.2f", shift @ARGV)."\n");' 1.335
1.33
Run Code Online (Sandbox Code Playgroud) 可能重复:
在double中移动小数位
为什么以下数字总和不等于0.4622?但0.46219999999999994
Double total = new Double(0.08) + new Double(0.0491) + new Double(0.3218) +
new Double(0.0113) + new Double(0.0); // = 0.46219999999999994
Run Code Online (Sandbox Code Playgroud)
我有一个检查用户输入的应用程序.
用户输入5个十进制数和一个总数.应用程序检查komma后面4位小数的所有5个数字的总和是否等于总数.
限制它给了我0.4621不等于0.4622.我不能使用DecimalFormat,因为它将它向上舍入.如果我明确地说,向下舍入,那么这种情况就会失败.
关于如何解决这个问题的任何建议?