Javascript浮点问题-舍入问题
Javascript floating point problem - Rounding issue?
我有一个问题,我的客户端脚本不计算相同的值作为我的服务器端代码:
例如:var x = (2.85 * .1);
alert(x);
结果为0.28500000000000003
然而,我的服务器端代码(c#)计算出0.285的数字,当四舍五入到小数点后2位时,得到0.28
如果我尝试将0.28500000000000003四舍五入到小数点后两位,我得到0.29。
如何让Javascript创建与服务器端代码匹配的图形
看起来我必须进行两次四舍五入——首先去掉后面的3,然后四舍五入到所需的小数点。
例如:var x = 0.2850000000003;
x = parseFloat(x.toFixed(3))
x = x.toFixed(2)
alert(x);
这是最好的解决方法吗?
(这是我之前打开并删除的问题的重新措辞)
。Net使用银行四舍五入。如果一个数字在四舍五入的中点,例如2.5,那么这个数字被四舍五入到最接近的偶数,在这种情况下是2。以这种方式舍入消除了向上舍入所带来的偏差。
你可以在javascript中使用银行家四舍五入:http://snippets.dzone.com/posts/show/1305.
您的c#代码正在使用十进制的基数10,默认情况下使用银行四舍五入。Javascript代码使用以2为基数的浮点运算。这两种形式的计算机算法必然会给出不同的结果。解决方法必须是在两个代码中使用相同的算术方法。
没有double形式的0.285这样的数字。以下是我在JRuby中测试时看到的两个数字:
irb(main):002:0> java.math.BigDecimal.new(0.285).to_s
=> "0.284999999999999975575093458246556110680103302001953125"
irb(main):003:0> java.math.BigDecimal.new(2.85 * 0.1).to_s
=> "0.28500000000000003108624468950438313186168670654296875"
显然,JRuby的行为和JS是一样的。: -)
相关文章:
- 浮点0.2+0.1舍入误差
- 谷歌材料图表:停止工具提示舍入
- jQuery - 带有一些数字的表格计算出现奇怪的舍入错误
- 有人可以详细解释这个 JavaScript 十进制舍入函数吗?
- 求和值时出现Javascript舍入问题
- 在追加文本中舍入数字输出
- Infrastics网络货币编辑舍入问题
- 柔性滑块问题淡入淡出效果
- 是否可以在 JavaScript 中实现没有舍入问题的任意精度算术
- JavaScript 中的舍入问题
- Javascript中的舍入问题
- 在 JavaScript 中向上舍入数字有问题
- JavaScript,数字舍入问题
- 修复CSS流体网格中的子像素舍入问题
- jQuery问题中的舍入数字
- 解析浮点数有舍入限制?我怎样才能解决这个问题
- 淘汰赛中的十进制值舍入问题
- Javascript:需要解决自动舍入的问题
- Javascript浮点问题-舍入问题
- 移动webkit浏览器在JS中有舍入问题吗?