Javascript的toPrecision()函数错误

Javascript error in toPrecision() function

本文关键字:函数 错误 toPrecision Javascript      更新时间:2023-09-26

我想在显示数字之前使用toPrecision()减小数字的大小。但是,有时我无法将函数的输出乘以另一个数字而不会产生小的舍入误差。参见下面的代码示例:

var x = 0.0197992182093305
alert (x.toPrecision(4)) //Correct: 0.01980
alert (Number(x.toPrecision(4))) //Correct: 0.0198
alert( Number(x.toPrecision(4)) * 100) //Incorrect: 1.9800000000000002

JSFiddle: http://jsfiddle.net/ueLsL460/4/这是怎么回事?

根据我的理解,Number(x.toPrecision(4)) * 100创建了一个新的Number对象,该对象不会继承父对象的精度。

如果在Math之后仍然希望它是精确的,则需要再次将其置于precision中。

alert((x * 100).toPrecision(4));
从技术上讲,这不是一个错误。这就是javascript的工作方式

使用原始构造函数并不是那么理想,除非您想做一些微不足道的事情。你能试着做下面的代码小提琴,看看这是否会为你做吗?

http://jsfiddle.net/ueLsL460/5/

 var x = 0.0197992182093305;
 alert((x * 100).toPrecision(4));

Javascript没有等效的小数-所以在您的情况下使用浮点数。这意味着Number(x.toPrecision(4))给出的不是0.0198,而是最接近0.0198的FP二进制数。因此,您所做的任何算术都将受到浮点算术中引入的精度损失的影响。如果输入

也可以看到同样的效果
 alert(0.0198 * 100);

By the way

  alert(0.0198 * 10 * 10);

不会给您带来任何问题(精度的损失不足以使其成为Javascript认为要显示的数字)-但这只是针对这个特定的数字。