Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序和Javascript代码之间的舍入差异_Javascript_Android_Rounding_Rounding Error - Fatal编程技术网

Android应用程序和Javascript代码之间的舍入差异

Android应用程序和Javascript代码之间的舍入差异,javascript,android,rounding,rounding-error,Javascript,Android,Rounding,Rounding Error,当我试图计算和舍入这些数字时,会得到两个不同的结果。今天的数字是336887,昨天的数字是336582。我在另一个字段中遇到了类似的问题,但在更新Java代码后,差异消失了 Javascript代码: document.getElementById("txt1").value = ((today - yesterday) / 10000).toFixed(3); public Double RoundDouble(Double num, Integer places)

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

Javascript代码:

    document.getElementById("txt1").value = ((today - yesterday) / 10000).toFixed(3);
    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代码:

    document.getElementById("txt1").value = ((today - yesterday) / 10000).toFixed(3);
    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 ));
Javascript代码返回.031,而Android代码返回.030。我做了计算,在四舍五入之前,数字是.0305。我不确定是什么导致了这个问题,因为我的另一个字段在正确地将.0295.030轮数时出现了问题。

分数((336887-336582)/10000)不能表示为IEEE-754双精度数。如果您尝试
((336887-336582)/10000)。toFixed(20)
,您将得到0.03049999999933。 Android版本中出现差异的原因可能是您处理返回
Math.round(num)
的方式:您忽略它。您可能会发现将行更改为
num=Math.round(num)更有用
在安卓系统中也有可能改变这种模式。ECMAScript中的默认舍入模式最接近偶数,即使在Android中也是半个。

不同硬件和操作系统上的不同浮点表示法对舍入的处理略有不同。对于浮点值,有时某些数字并没有一个完美的表示形式。我有另一个字段也有类似的问题。它没有正确地将.0295四舍五入到.030,但在我在Android应用程序中更改了四舍五入方法后,它似乎已经解决了该特定字段的问题。我不太明白为什么它解决了一个字段的问题,而解决了另一个字段的问题。“document.getElementById”不是ASP代码。看起来像客户端代码。感谢您指出这一点。我犯了一个诚实的错误。代码是JavaScript,而不是ASP。编辑问题以反映这一点。将舍入中涉及的所有代码合并为:
num=Math.round(num*temp)/temp修复了该问题。谢谢你的帮助!请随时使用此代码更新您的答案。