为什么在某些情况下,将小数点后两位的值乘以 100 会产生十进制值而不是整数?在 JavaScript 中

Why, in some cases, does multiplying a value with two decimal places by 100 result in a decimal value rather than an integer? In JavaScript

提问人:Nadine Schneider 提问时间:11/3/2023 更新时间:11/3/2023 访问量:57

问:

在某些情况下,当我将小数点后两位的值乘以 100 时,结果不是整数,而是小数点后有几位数字的十进制值。

我正在使用 JavaScript

例如,以下是我测试的一些计算来说明我的问题。我使用 Chrome 浏览器的控制台进行了测试。

100*4.98 = 498.000000000000006

100*4.89 = 488.999999999999994

100*4.77 = 476.999999999999994

100*4.61 = 461.000000000000006

100*4.55 = 455

100*4.88 = 488

100*4.76 = 476

100*4.02 = 401.999999999999994

100*4.01 = 401

如您所见,有些情况会产生整数值,我认为这是正确的。但是,其他任意值会导致小数。

有人可以解释为什么会发生这种情况,我该如何解决这个问题?

JavaScript 整数 十进制 计算

评论

3赞 Palladium02 11/3/2023
这个问题的答案是否回答了您的问题?
4赞 Palladium02 11/3/2023
这回答了你的问题吗?浮点数学坏了吗?

答:

0赞 Bob Martin 11/3/2023 #1

你应该使用 .toFixed()

var a =  0.0532;
var b =  a * 100;
b.toFixed(2);     //specify number of decimals to be displayed

为什么会发生这个问题,javascript 处理带有浮动十进制数的数字,因此 javascript 将 100 识别为 100.0000000000,将 4.98 识别为 4.98000000 .... 因此,当将它们相乘时,转换为二进制数并相乘并转换为十进制数。通过这些过程,可以减少进动。

祝你好运。