3825567180763585000 + 100万 200万 300万的时候计算结果都是正常的 为什么
+400万的时候 计算结果就出错了3825567180767585300
怎么保证计算正确性 谢谢
3825567180763585000 + 100万 200万 300万的时候计算结果都是正常的 为什么
+400万的时候 计算结果就出错了3825567180767585300
怎么保证计算正确性 谢谢
使用bignumber这个库: https://www.npmjs.com/package/bignumber.js
/**
* JavaScript中的加减乘除的精度的问题
* 基于bignumber.js
*/
const BigNumber = require('bignumber.js')
class MyBigNumber {
/**
* 加法 用例: 0.1 + 0.2 ?= 0.3
*/
static plus(a, b) {
const r = new BigNumber(a).plus(b)
// @Test Logger
console.log(`【加法】-处理前:${a + b}, 处理后:${r}`)
return +r.toString()
}
/**
* 减法 用例:0.12 - 0.1 ?= 0.02
*/
static minus(a, b) {
const r = new BigNumber(a).minus(b)
// @Test Logger
console.log(`【减法】-处理前:${a - b}, 处理后:${r}`)
return +r.toString()
}
/**
* 乘法 用例:1.15 * 100 ?= 115
*/
static mul(a, b) {
const r = new BigNumber(a).multipliedBy(b)
// @Test Logger
console.log(`【乘法】-处理前:${a * b}, 处理后:${r}`)
return +r.toString()
}
/**
* 除法 用例: 0.15 / 0.1 ?= 1.5
*/
static div(a, b) {
const r = new BigNumber(a).dividedBy(b)
// @Test Logger
console.log(`【除法】-处理前:${a / b}, 处理后:${r} `)
return +r.toString()
}
}
3825567180763585000
已经超出了 number
类型最大的安全整数(2^53-1)
Number.isSafeInteger(3825567180763585000)
// log => false
8 回答6k 阅读✓ 已解决
9 回答9.4k 阅读
6 回答5k 阅读✓ 已解决
5 回答3.6k 阅读✓ 已解决
4 回答8k 阅读✓ 已解决
7 回答10k 阅读
5 回答7.3k 阅读✓ 已解决
超出最大整数就会出现不正常的结果,首先了解下BigInt,就是为了解决这个问题
BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值.在对大整数执行数学运算时,以任意精度表示整数的能力尤为重要,使用BigInt,整数溢出将不再是问题.
最大整数: Number.MAX_SAFE_INTEGER -> 9007199254740991
最小整数: Number.MIN_SAFE_INTEGER -> -9007199254740991
创建:BigInt("9007199254740995"); // → 9007199254740995n