Number(44211572582780928)
为啥会输出 44211572582780930
1
VeryZero 2022-08-24 16:57:18 +08:00
精度丢失
|
2
memedahui 2022-08-24 16:57:21 +08:00
js 精度问题,一般的语言都是这种问题了,java 用 bigdecimal 类,js 推荐用 bignumber.js
|
3
hkyshefavor 2022-08-24 17:00:50 +08:00
超过 Number.MAX_SAFE_INTEGER 值了,精度丢失
|
4
foolnius 2022-08-24 17:01:23 +08:00
可以通过 Number.MAX_SAFE_INTEGER 查看最大值
|
5
Guidoo OP |
6
yukinotech 2022-08-24 17:06:41 +08:00
安利一下自己写的库,https://github.com/yukinotech/JSBD ,实现 tc39 bigdecimal 提案 https://github.com/tc39/proposal-decimal
|
7
Jooooooooo 2022-08-24 17:09:45 +08:00
大数字都建议直接用 string 省事.
|
8
seakingii 2022-08-24 17:22:19 +08:00
@Guidoo 别人都说精度丢失了还问为啥 ....
- 实在要了解底层原因,建议去看计算机硬件相关的入门书籍 - 简单的说,用有限的硬件空间来存储无限的浮点数字难(比如浮点数 1/3 = 0.3333333333333333....),必须要在精度上有个取舍 - 如果只是存储之类的,可以用字符串,如果要运算,可以考虑 bignumber.js 这类的外部库 |
9
dudubaba 2022-08-24 19:09:52 +08:00
判断最大安全值 Number.isSafeInteger() 来判断整数的合法性,当超过时可以转换为字符串或者用 BigInt(44211572582780928)
|
10
mxT52CRuqR6o5 2022-08-24 19:11:16 +08:00 1
IEEE 754
|
13
Jobing 2022-11-05 21:41:03 +08:00
精度丢失,可以用 npm 库 搜索 json-bn 开源库解决。
|