Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.4k views
in Technique[技术] by (71.8m points)

关于一个js的toString问题,toString(money).length < 32 的作用是什么?

最近看公司源码,发现一个很奇怪的写法。用来验证传递过来的金额是否合法。代码如下:

if("number" === checkVariableType(money) && toString(money).length < 32) {
    params.money = money;
}else {
    params.money = 0;
}

checkVariableType是一个检测变量类型的函数。
不明白的是toString(money).length < 32的作用是什么。求解~


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

js中的数都是 number 类型,存在的范围是正负2的53次幂 。用户钱当然不会那么多,但却可以足够小,尤其是在浮点计算(如计算利息,除不尽等精度问题)。这些计算关系在底层会转为二进制数进行位操作,js所有数在位运算时会被隐式地默认转为32位整数处理。换而言之在浮点计算时容易出问题,如下这种不同计算顺序,产生的结果是不一样

0.1+0.2+0.3
0.6000000000000001
0.1+(0.2+0.3)
0.6

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...