Android App和Javascript代码之间的舍入差异

时间:2014-11-07 20:16:24

标签: javascript android rounding rounding-error

在尝试计算和舍入这些数字时,我得到两个不同的结果。 今天数字 336887 昨天数字 336582 。我在另一个字段中遇到了类似的问题,但在更新Java代码后,差异消失了。

Javascript代码:

    document.getElementById("txt1").value = ((today - yesterday) / 10000).toFixed(3);

Android代码:

    public Double RoundDouble(Double num, Integer places)
    {
        Double temp = Math.pow(10.0, places);

        num = num * temp;
        Math.round(num);
        num = num / temp;

        return num;
    }

    Double total = RoundDouble((today - yesterday) / 10000,3);
    txt1.setText(df.format(total ));

当Android代码返回 .030 时,Javascript代码会返回 .031 。我做了数学,在四舍五入之前,数字是 .0305 。我不确定是什么导致了这个问题,因为我遇到的问题是 .0295 .030

1 个答案:

答案 0 :(得分:1)

分数((336887 - 336582)/ 10000)不能表示为IEEE-754双精度数。如果您尝试((336887 - 336582) / 10000).toFixed(20),您将获得0.03049999999999999933。 Android版本差异的原因可能是您处理Math.round(num)返回的方式:您忽略它。您可能会发现将行更改为num = Math.round(num);更有用。 也可以在Android中更改rounding mode。 ECMAScript中的默认舍入模式与Android中的HALF_EVEN最接近偶数。