数据类型值在计算机底层,都是以二进制进行存储
例如:浏览器中数字是十进制的,但是存储在计算机底层就是二进制,存在把十进制转换为二进制
整数:除以2取余数,商为0结束
小数:乘以2,取整数部分,剩余继续乘2,直到整数部分位1,没有小数部分了(特殊:很多浮点数转化为二进制,结果都是无限循环的,但是计算机底层最多只能存储64位,超出的部分截掉 => 存储在计算机底层的浮点数对应的二进制值可能本身就是不准确的)
浏览器中的十进制,都是有长度限制的(一般是16-17位),所以0.1+0.2 计算机底层处理完的结果 0.30000000000000004
浏览器在截取时,把超出的部分截掉,截取后如果后面全是0,则省略掉,但凡有1位不是0,则不能省略(0.3截取后最后一位是4,所以要保留前面所有的0,但0.4截取后全是0,则可以省略0,保留0.4)
一般处理:
1. +(0.1+0.2).toFixed(2) 自动四舍五入后转换为数字
2. 重写plus()
原文:https://www.cnblogs.com/zhoujingye/p/14855221.html