adi*_*dis 7 javascript multiplying
我遇到了一个奇怪的问题,我想做一些基本的数学检查.我已阅读以避免浮动数字,所以我决定将我的数学值乘以10000,因为我的值可以在0.9和0.0025之间.
一切正常,除了两个值:0.56和0.57:
var result = 0.57 * 10000
Run Code Online (Sandbox Code Playgroud)
结果是:5699.999999999999,我希望5700 !! 并且0.56也出错了,但所有其他值都是正确的,我在这里缺少什么?
Geo*_*kis 13
最好的解决方案是使用toFixed(x),并设置xa小数,这些小数应该总是大于预期的小数结果(我通常把8放在那里).
但是你应该将结果再次转换回数字,而不是黑客攻击kirilloid-,以便删除任何不需要的小数.之后,在数字上执行您喜欢的任何格式.
所以这将返回所需的结果:
var result = +(0.57 * 10000).toFixed(8)
Run Code Online (Sandbox Code Playgroud)
结果现在是5700
前面的+,将"toFixed"的字符串结果再次转换为数字.
希望有所帮助!
var multiply = function(a, b) {
var commonMultiplier = 1000000;
a *= commonMultiplier;
b *= commonMultiplier;
return (a * b) / (commonMultiplier * commonMultiplier);
};
Run Code Online (Sandbox Code Playgroud)
这在已知范围内有效。因此,最好将数字四舍五入到小于 的小数点commonMultiplier。
> multiply(3, .1)
< 0.3
> multiply(5, .03)
< 0.15
Run Code Online (Sandbox Code Playgroud)
您在 Javascript 中的选择(事实上,在大多数语言中)是整数或浮点数。如果你写“0.57”,你就会迫使它进入浮点数的世界,而精度是有限的。
如果您想要绝对精度,则需要专门使用整数。
| 归档时间: |
|
| 查看次数: |
6489 次 |
| 最近记录: |