最近看公司源码,发现一个很奇怪的写法。用来验证传递过来的金额是否合法。代码如下:
if("number" === checkVariableType(money) && toString(money).length < 32) {
params.money = money;
}else {
params.money = 0;
}
checkVariableType
是一个检测变量类型的函数。
不明白的是toString(money).length < 32
的作用是什么。求解~
js中的数都是
number
类型,存在的范围是正负2的53次幂 。用户钱当然不会那么多,但却可以足够小,尤其是在浮点计算(如计算利息,除不尽等精度问题)。这些计算关系在底层会转为二进制数进行位操作,js所有数在位运算时会被隐式地默认转为32位整数处理。换而言之在浮点计算时容易出问题,如下这种不同计算顺序,产生的结果是不一样