数学四舍五入Java问题2.495到2位数=2.49
首先,这是我使用的代码:数学四舍五入Java问题2.495到2位数=2.49,java,math,rounding,digit,Java,Math,Rounding,Digit,首先,这是我使用的代码: public static float roundAt(float value , int digits) { double pow = Math.pow(10, digits); double retvalue; retvalue = (value * pow); retvalue = Math.round(retvalue); retvalue = retvalue / pow; return (float)
public static float roundAt(float value , int digits) {
double pow = Math.pow(10, digits);
double retvalue;
retvalue = (value * pow);
retvalue = Math.round(retvalue);
retvalue = retvalue / pow;
return (float) retvalue;
}
因此,使用这个方法,我做了以下工作
如果我将这些值四舍五入:
roundAt(0.495f,2) = 0.5
roundAt(1.495f,2) = 1.5
roundAt(2.495f,2) = 2.49
我试图理解这背后的逻辑,但我不能。我希望每次取整都是一样的,这样我就可以用取整得到2.5(2.495f,2)
。知道发生了什么吗
谢谢原因是,您
retvalue = (value * pow);
…导致
2.495 * 100.0 = 249.4999885559082
使用double而不是float将解决该特定问题。float和double都不是精确值,但float甚至不如double精确,更容易导致错误。如果你好奇,你会发现很多关于浮点运算的资料。如果你想
2.495f*100.0
你会注意到结果是249.4999885559082
。由于小数部分小于.5
,因此四舍五入为249.0
,除以100.0
,得到2.49
如果您想了解有关如何舍入双精度的更多信息,请选中此项