js中parseInt和Number

  昨天在项目中遇到一个问题,有关字符串准换成数字的问题,具体如下:

  页面中<input type="number" id="bankNum" ng-model="bankNum" />,这个银行卡是从接口中取出来的,得到字段值是 bankCode :'3333333333333333333' 字符串类型,由于$scop.bankNum 是数字类型的,所以需要将bankCode准换成数字类型;接下来代码准换如下:

//方法一:
parseInt(bankCode);//即parseInt('3333333333333333333')
//得到结果3333333333333333500

//方法二:
Number('bankCode');
//得到结果3333333333333333500

这明显不对呀。结果换了一种方式赋值:document.getElementById('bankNum').value =data.bankCode。

  由于昨天事件紧急,一值想探索其原因,想弄个明白,今天抽时间查了一下parseInt和Number的最大值和最小值。

   JavaScript中所有的数字,无论是整数还是小数,其类型均为Number。在程序内部,Number类型的实质是一个64位的浮点数,这与Java中double类型的浮点数是一致的;因此,JavaScript中所有的数都是浮点数。遵循IEEE 754标准(浮点数算术标准),JavaScript所能表示的数值范围为正负1.7976931348623157乘以10的308次方,其最小所能表示的小数为正负5乘以10的负324次方,这两个边界值可以分别通过访问Number对象的MAX_VALUE属性和MIN_VALUE属性来获取。

  
 
 「对于整数,根据ECMAScript标准的要求(http://ecma262-5.com/ELS5_HTML.htm#Section_8.5),JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围;对于超过这个范围的整数,JavaScript依旧可以进行运算,但却不保证运算结果的精度。值得注意的是,对于整数的位运算(比如移位等操作),JavaScript仅支持32位整型数,也即从-2147483648到+2147483647之间的整数。」

  另外,我在console面板打印了

  Number.MAX_VALUE ;->1.7976931348623157e+308
  Number.MAX_SAFE_INTEGER;->9007199254740991

  Number.MIN_SAFE_INTEGER;->-9007199254740991
  Number.MIN_VALUE;->5e-324

  以上由于'3333333333333333333' 这个是19位的,而最大表示的数字是9007199254740992,16位的;银行卡表示的数字已经超出了这个最大值范围,所以导致运算结果精度有问题。

  
  以上若有问题,请随时沟通;若对你有帮助,请帮忙点赞~

  

  参考文章:http://oceanzhu.com/archives/103

 

  

  

原文地址:https://www.cnblogs.com/imsomnus/p/8985420.html