toPrecision()函数中的Javascript错误
我想在显示之前使用toPrecision减小数字的大小。然而,有时我无法将函数的输出乘以另一个数字,而不会得到一个小的舍入误差。请参见下面的代码示例:toPrecision()函数中的Javascript错误,javascript,Javascript,我想在显示之前使用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:
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
JSFIDLE:这是怎么回事?根据我的理解,Numberx.toPrecision4*100创建了一个新的数字对象,它不会继承父对象的精度 如果你仍然想在数学运算后保持精确,你需要再次将其精确
alert((x * 100).toPrecision(4));
从技术上讲,这不是一个错误。这正是javascript的工作方式。根据我的理解,Numberx.toPrecision4*100创建了一个新的Number对象,它不会继承父对象的精度 如果你仍然想在数学运算后保持精确,你需要再次将其精确
alert((x * 100).toPrecision(4));
从技术上讲,这不是一个错误。这正是javascript的工作方式。除非您试图做一些琐碎的事情,否则使用基本构造函数并不是那么理想。你能试着在下面的小提琴上做代码,看看这是否对你有用吗
除非您试图做一些琐碎的事情,否则使用基本构造函数并不是那么理想。你能试着在下面的小提琴上做代码,看看这是否对你有用吗
Javascript没有十进制等价物,所以在您的例子中使用浮点。这意味着Numberx.toPrecision4并没有给出精确的0.0198,而是最接近0.0198的FP二进制数。因此,您所做的任何运算都会受到浮点运算中引入的精度损失的影响。如果你这样做,你也会看到同样的效果
alert(0.0198 * 100);
顺便说一下
alert(0.0198 * 10 * 10);
毫无疑问,精度损失的累积不足以使其成为Javascript认为要显示的数字,但这仅限于此特定数字。Javascript没有十进制等效数字,因此在您的情况下使用浮点。这意味着Numberx.toPrecision4并没有给出精确的0.0198,而是最接近0.0198的FP二进制数。因此,您所做的任何运算都会受到浮点运算中引入的精度损失的影响。如果你这样做,你也会看到同样的效果
alert(0.0198 * 100);
顺便说一下
alert(0.0198 * 10 * 10);
没有问题精度损失的积累不足以使其成为Javascript认为要显示的数字,但这只是针对这个特定数字。造成问题的不是函数。看看其他人。上面的数字都不能用二进制浮点表示,所以不要指望没有正确的字符就可以正确地打印出来formatting@EricBaldwin-我只是对我的回答做了一点修改,以澄清*10*10不会导致任何问题-但仅针对这个特定案例。你可能有一个数字,即使是*10,精度的损失也会增加,这不是造成问题的函数。看看其他人。上面的数字都不能用二进制浮点表示,所以不要指望没有正确的字符就可以正确地打印出来formatting@EricBaldwin-我只是对我的回答做了一点修改,以澄清*10*10不会导致任何问题-但仅针对这个特定案例。即使使用*10,也可能会出现精度损失的数字。这里不需要数字函数。x*100.toPrecision4可以。谢谢你的建议。更新了我的答案。这里不需要数字功能。x*100.toPrecision4可以。谢谢你的建议。更新了我的答案。