这些javascript数字有什么问题?
我试图总结收入,但js的数学计算有一些奇怪的行为。
let earned = 0
setInterval(() => {
earned += 0.1
console.log(earned)
}, 1000)
对于这种问题,我想到的唯一解决方案是使用整数而不是小数,然后将它们除以100并使用.toFixed(2)
添加小数。但我不太确定这是否是解决这类问题的最佳方法。
是否有任何现有的最佳实践使用在JS世界或我做错了什么?
let earned = 0
setInterval(() => {
earned += 10
output = earned / 100
output = output.toFixed(2)
output = Number(output)
console.log(typeof output, output)
}, 1000)
我要处理像14.12345678
这样的8位小数吗?
这个问题是由JavaScript中浮点数的表示方式引起的。并不是所有的十进制数都可以精确地用计算机用来进行计算的二进制格式表示。这可能导致小的舍入误差随着时间的推移而累积。
我认为你所做的是好的