Javascript的toPrecision()函数错误
Javascript error in toPrecision() function
我想在显示数字之前使用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认为要显示的数字)-但这只是针对这个特定的数字。
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- Javascript搜索函数错误
- Chrome Javascript日期构造函数错误
- 浏览器中出现javascript初始大写函数错误
- Createjs冲突问题localToLocal不是函数错误
- Java脚本函数错误
- 更新带有Javascript函数错误的变量
- 如何将对象插入对象列表的开头,当它有 unshift 不是函数错误
- 在将 Pickadate 与 Meteor 一起使用时,未定义不是函数错误
- 运行咕噜咕噜咕噜抛出 _.object 不是函数错误
- 了解函数(错误、数据)回调
- javascript中的typeof()函数错误
- 我一直在获取angularjs服务不是函数错误(LoginService.login不是函数)
- HTML5拖拽&drop正在抛出undefined不是函数错误
- Google Maps API a.lat不是函数错误
- getItemAtIndex不是函数错误
- Javascript停止函数错误
- 对话框函数错误无效函数
- Javascript 自定义函数错误
- 因果报应单元测试'未定义'不是函数错误