avatar1 avatar
@{[{user.name}]}
希腊·圣域
since February 1500
JS中只有一种数字类型: Number

不像其他的编程语言,JS中的数字没有 int, long, float, double等等,所有的数字类型都被存储为64位字节中。

精度 Precision
console.log(999999999999999);  
//打印出:999999999999999

console.log(9999999999999999);  
//打印出10000000000000000

整数型的数字最大可表示15位,超过15位后即变为不精确的数字。

Integers (numbers without a period or exponent notation) are considered accurate up to 15 digits.

console.log(0.11111111111111111)  
//打印出0.11111111111111111 -- 共17位
console.log(0.111111111111111111)  
//打印出0.11111111111111111 -- 共17位

可以看出小数位的最大精度为小数点后17位, 超过17位的则不再精确,注意是不再精确,而不是丢弃, 假如超过17位,0.111111111111111112会输出什么呢,有时会输出0.11111111111111111,有时是0.111111111111111112,即不再精确

小数运算不总是精确的!!!
  0.1 + 0.2 == 0.300000000000000004

这种问题的出现是因为0.1与0.2在计算前会被存储到64位的字节中会有一定的精度损失,或变大或变小,因为损失的精度在小数后很多位,对于实际生产不会造成任何问题,如果两个数字说产生的精度损失不能互相抵消的话,就会产生上面的情况。这个时候如果用于实际生产中可以使用.toFixed(2)来确定小数点后保留2位

还有一个巧妙的办法可以得到精确的 0.1 + 0.2 的结果 0.3, 就是计算前将两个被加数转化为整型,然后在用除法还原:(0.1 * 10 + 0.

当前第 1页,一共 1页