首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免Android应用开发中的舍入误差?

如何避免Android应用开发中的舍入误差?
EN

Stack Overflow用户
提问于 2010-07-12 11:09:23
回答 3查看 830关注 0票数 0

我在一个android应用程序中做了看似简单的数学运算,但我一直收到巨大的舍入误差。例如。

Float.toString(0.4*0.4*12.5);

我期望得到2作为上面等式的结果。然而,我得到了2.0000002

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-12 14:48:49

所以我最终做了两个函数,一个是四舍五入,另一个是浮点数。看起来像皮塔,但除了被限制在一个预置的精度水平(我将考虑设置一个应用程序设置)之外,它确实可以工作。

代码语言:javascript
复制
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();
}
票数 -1
EN

Stack Overflow用户

发布于 2010-07-12 11:29:18

0.4不能在32位IEEE-754浮点数中精确表示。请参见:

  • http://babbage.cs.qc.edu/IEEE-754/Decimal.html
  • http://floating-point-gui.de/
  • http://docs.sun.com/source/806-3568/ncg_goldberg.html

如果您绝对需要任意精度,请使用BigDecimal。不过,任意精度的数学运算速度较慢。或者使用64位数学(双精度)来提高精度。

票数 5
EN

Stack Overflow用户

发布于 2010-07-12 11:32:06

浮点数是一个近似的数字系统,在你的例子中,0.4不能用浮点数精确地表示,所以它被尽可能地接近,所以你得不到预期的结果。

Android有一个可以使用的圆形函数吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3225642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档