在尝试计算和舍入这些数字时,我得到两个不同的结果。 今天数字 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 。
答案 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最接近偶数。