我在一个android应用程序中做了看似简单的数学运算,但我一直收到巨大的舍入误差。例如。
Float.toString(0.4*0.4*12.5);
我期望得到2作为上面等式的结果。然而,我得到了2.0000002
发布于 2010-07-12 14:48:49
所以我最终做了两个函数,一个是四舍五入,另一个是浮点数。看起来像皮塔,但除了被限制在一个预置的精度水平(我将考虑设置一个应用程序设置)之外,它确实可以工作。
public static float fRound(float Rval, int Rpl) {
float p = (float)Math.pow(10,Rpl);
Rval = Rval * p;
float tmp = Math.round(Rval);
return (float)tmp/p;
}
public static Double dRound(double d, int decimalPlace){
BigDecimal bd = new BigDecimal(Double.toString(d));
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
return bd.doubleValue();
}发布于 2010-07-12 11:29:18
0.4不能在32位IEEE-754浮点数中精确表示。请参见:
如果您绝对需要任意精度,请使用BigDecimal。不过,任意精度的数学运算速度较慢。或者使用64位数学(双精度)来提高精度。
发布于 2010-07-12 11:32:06
浮点数是一个近似的数字系统,在你的例子中,0.4不能用浮点数精确地表示,所以它被尽可能地接近,所以你得不到预期的结果。
Android有一个可以使用的圆形函数吗?
https://stackoverflow.com/questions/3225642
复制相似问题