JS浮点数的研究

Posted 降低能耗ing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS浮点数的研究相关的知识,希望对你有一定的参考价值。

为什么0.1 + 0.2 得到的是 0.30000000000000004

console.log( 0.1 + 0.2 == 0.3);
//false

在js中所有的整数和小数都是以Number形式储存在字节bit中,而javaScipt中Number采用的是64位的双精度浮点型.

而0.1和0.2转为二进制时:

//0.1转为二进制
0.1 =0.0 0011 0011 0011 0011...(0011无限循环)
//0.2转为二进制
0.0011 0011 0011 0011 0011...(0011无限循环)
//转为二进制时,0.1和0.2的数字实际上是无限循环的.

在加法计算时,Number实际上是以零后52位进行运算,有误差值.

var d = 0.1 + 0.2;
console.log(d.toString(2));
console.log(d);
//0.0100110011001100110011001100110011001100110011001101(默认54位)
//0.30000000000000004

 

解决方法

toFixed方法来固定保留小数位,固定保留小数位。

 

 

以上是关于JS浮点数的研究的主要内容,如果未能解决你的问题,请参考以下文章

js实现浮点数保留两位小数代码

内部格式为 GL_RGBA8 的纹理在片段着色器中显示为浮点数

js浮点数运算封装, 起因财务部分精确计算

js 双精度浮点数

js浮点数精度误差问题,解决方法

#yyds干货盘点#JS两个大数相加