今天加班,配合前端工作,前端有一个奇怪的问题,有一个数据从后端取出来后,在随后的接口传给后端,但是这个数据,不知道怎么被改变了,我调试了一下,发现是 parseInt 之后,数据变了,但是我不知道为什么,所以来问一下,有没有兄弟清楚
var s = "62201604091700693";
alert(parseInt(s,10));
alert 出来的数据变成 62201604091700696
今天加班,配合前端工作,前端有一个奇怪的问题,有一个数据从后端取出来后,在随后的接口传给后端,但是这个数据,不知道怎么被改变了,我调试了一下,发现是 parseInt 之后,数据变了,但是我不知道为什么,所以来问一下,有没有兄弟清楚
var s = "62201604091700693";
alert(parseInt(s,10));
alert 出来的数据变成 62201604091700696
|
yyfearthApr 9, 2016 via iPhone
1
看样子 貌似太长了?
|
|
2
@yyfearth 应该不是太长了, javascript 的 number 支持很长很长,而且换成 62201604091700700 这种都没问题的
|
|
yxzblueApr 9, 2016
3
楼主的这个数字字符串大于 Number.MAX_SAFE_INTEGER 。
参考链接:<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER>。 怎么解决等楼下的高人吧... |
|
ExceptionluoApr 9, 2016
4
超出了 JS 的安全值范围
|
|
5
|
|
magicdawnApr 9, 2016
6
你的串是 56 位的, IEEE-754 安全值是 2^53 - 1, 怎么解决,拆开表示,或者找找 bigint 库,里面应该也是拆开表示
|
|
ileenhowApr 9, 2016
8
|
|
SoloCompanyApr 10, 2016 via iPhone
9
js 在设计上对整数运算是有天然缺陷的
因为为了简单它标准规范里面所有数字都是双精度浮点数 假如它能支持 64bit 整数的话,十进制至少 18 位是没有问题的 有整数运算要求的可以用 jsbn.js 这个库很小,用了做 rsa 什么的都是 ok 的 |
|
v2surviveApr 10, 2016 via Android
10
还要传给后端而前端自己不用这个数字的话,再传到后端的时候可以考虑还是传 string
|
|
12
@SoloCompany 好的,标记一下,学习学习
|
|
xieguangleiApr 14, 2016
14
|