web前端入门到实战:JS浮点数值问题
admin
2023-02-12 23:00:09
0
一、JS能够正确表示的整数
Math.pow(2,53) //即9007199254740996
"9007199254740996".length //16
9007199254740993  // 9007199254740992

备注:

1. 2的53次方,并不是按数值长度设置的,
2. 总数量级为百万亿
3. 超出会显示,但是不正常(表现为max+1=max;输入16~21之间位数的9会直接往上+1等;)所以不能用于正常计算
4.21位会显示1e+21

安全值判断(ES6)Number.isSafeInteger(num):

Number.isSafeInteger(9007199254740993)  // false (存在一个边界问题)
Number.isSafeInteger(990)  // true
Number.isSafeInteger(9007199254740993 - 990)  // true
9007199254740993 - 990
// 返回结果 9007199254740002
// 正确答案应该是 9007199254740003
二、浮点型数
9007199254700.3333 //9007199254700.334
"9007199254700.334".length //17(包含小数点)

.000001 //0.000001
.0000001 //1e-7
1.0000001 //1.0000001

9.0071992547409919 //9.007199254740993

备注:

1. 并不是两边都是2的53次方而是合在一起
2. 一起共16位,超出向上取整,
3. 如果小数位数超出,不一定是截断还是向上进,如上
3. 0.000001会显示1e-7,但前面带个整数就不会了

以上仅表示一些测试现象,留做注意和参考

三、位运算(32位)

JS里面尽管能够正确表示的数值量在2^53,但是位运算能够正常运算的范围却依然是32位,第一位为符号位,所以是2^31,转成10位的边界值是(2147483648)。

~~2147483647
2147483647
~~2147483648
-2147483648
~~2147483649
-2147483647
~~2147483650
-2147483646

备注:

1. JS的位移运算符有:(|,&,<<,>>,~,^) ,要特别注意使用时候的位数限制

2. 如上的按位取反运算可以看出,超出部分会变成负数往后减

四 、两位小数价格的处理方式

一般处理方式都是转整以后运算,再除以100,例如:

const priceMultiply=(a,b)=>(a*b*100+.5|0)/100; //乘法
priceMultiply(18.12,10) //181.2 //后面不带0的数字
(18.12*10).toFixed(2) //181.20 //后面带0的字符串
web前端开发学习Q-q-u-n:⑦⑧④-⑦⑧③-零①② ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法
(从零基础开始到前端项目实战教程,学习工具,职业规划)

备注:这里要注意toFixed()函数的语法:

NumberObject.toFixed(num)

所以写之前需要保证toFixed的对象是数字,否则会报错

//报错情况:
(null).toFixed(2)
(undefined).toFixed(2)
("222.333").toFixed(2)
//特殊:NaN是数字,但是无法取小数,也并不会报错
(NaN).toFixed(2)  //"NaN"

相关内容

热门资讯

菲尔兹奖得主邓煜写过这些诗词 邓煜 李少君 徐俪成 | 澎湃新闻记者 徐萧 整理北京时间7月23日晚,中国数学家王虹、邓煜获颁菲尔...
中国海警局新闻发言人就菲位南海... 中国海警局新闻发言人姜略表示,7月24日,菲律宾组织7艘公务船、3艘海警舰、1艘运鱼船,并唆使大量渔...
外交部回应美国对数十国加征关税 7月24日,外交部发言人林剑主持例行记者会。有记者问:美国新一轮关税措施将于今天生效,外交部能否就此...
台湾岛以东相关海域治理进入经济... 为全面了解我国管辖海域渔业资源状况,7月17日至23日,农业农村部中国水产科学研究院东海水产研究所,...
日本正式决定设立国家情报局:系... 据凤凰卫视报道,日本政府7月24日正式决定设立国家情报局,计划于31日召开首次国家情报会议。这是日本...
伍斌任福建省副省长 据“新福建”客户端消息,7月24日,福建省十四届人大常委会第二十三次会议闭幕。会议表决通过了有关人事...
滚筒洗衣机脱水转不起来 滚筒洗衣机脱水转不起来:1、洗衣机顶盖的安全开关损坏。洗衣机在脱水的过程属于高速运作的机械运动。在脱...
洗衣机甩干桶嗡嗡响转不起来 洗衣机甩干桶嗡嗡响转不起来1、可能是洗衣机甩干桶下面的相关轴承长时间使用,缺乏润滑油导致的。2、可能...
不平衡滚筒洗衣机脱水转不起来 不平衡滚筒洗衣机脱水转不起来洗衣机不脱水时,首先检查洗衣机内是否有水。如果有水,首先打开排水阀检查里...
洗衣机脱水桶转不起来 1、有可能是因为洗衣机的内筒当中所放置的衣物过多了导致的。2、还有可能是因为电压不正常导致的。3、也...