js限制两位小数 为什么在Javascript中添加两个小数会产生错误的结果?



js计算 (4)

可能重复:
JavaScript的数学被打破了吗?

为什么JS搞砸了这个简单的数学?

document.write(.1 + .2)  // 0.3000000000000004
document.write(.3 + .6)  // 0.8999999999999999

第一个例子大于正确的结果,而第二个例子则更少。 ??? !! 你是如何解决这个问题的? 在执行操作之前,您是否必须始终将小数转换为整数? 我只需要担心添加(*和/在我的测试中似乎没有相同的问题)?

我在很多地方寻找答案。 一些教程(如购物车表单)假装问题不存在,只是将值一起添加。 大师为各种数学函数提供了复杂的例程,或者提到JS“顺便做一份工作”,但我还没有看到解释。

https://ffff65535.com


浮点指南

为什么我的数字,如0.1 + 0.2加起来不是很好的一轮0.3,而是我得到一个奇怪的结果,如0.30000000000000004?

因为在内部,计算机使用的格式(二进制浮点)无法准确地表示0.1,0.2或0.3之类的数字。

编译或解释代码时,“0.1”已经四舍五入到该格式中最接近的数字,这甚至在计算发生之前就会导致小的舍入误差。

该网站有详细的解释以及如何解决问题的信息(以及如何根据您的情况决定是否存在问题)。



这不是仅限javascript的限制,它适用于所有浮点计算。 问题是0.1和0.2和0.3并不能完全表示为javascript(或C或Java等)浮动。 因此,您看到的输出是由于这种不准确。

特别是只有两个幂的某些和是完全可以表示的。 0.5 = = 0.1b = 2 ^( - 1),0.25 = 0.01b =(2 ^ -2),0.75 = 0.11b =(2 ^ -1 + 2 ^ -2)都可以。 但是1/10 = 0.000110001100011..b只能表示为2的幂的无限和,语言在某个时刻切断。 它的这种斩波导致了这些轻微的错误。






decimal