关于一个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的作用是什么。求解~

阅读 2.3k
4 个回答

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

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

大概就是说 用户不会有那么多钱吧,想必再没别的意思了

toString方法并不是javascript中默认的方法,所以你需要给出一个这个方法的定义才好展开。

需要给出toString的实现,盲猜一波这里的 toString = Number.toString(2), 判断金额的二进制位数是否超过了32位,防止一些超过32位整形在位运算丢掉高位等导致的隐性bug

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏