bignumber.js负数取模返回错误值问题咨询
BigNumber.js 负数取模返回正余数的解决方法
当使用BigNumber.js处理负数取模时,比如BigNumber(-1).modulo(BigNumber(17))会返回-1,但实际期望得到正余数16。这是因为BigNumber.js的modulo方法返回结果的符号与被除数一致,而非遵循数学中取模结果为非负数的规则。
要得到符合预期的正余数,可以通过以下方式处理:
- 对
modulo的结果进行二次修正,加上模数后再取一次模:
import BigNumber from 'bignumber.js'; const a = BigNumber(-1) const p = BigNumber(17) const positiveMod = a.modulo(p).plus(p).modulo(p); console.log(positiveMod.toString()); // 输出 16
- 或者封装一个通用的正取模函数:
import BigNumber from 'bignumber.js'; function positiveModulo(num, mod) { const result = num.modulo(mod); return result.isNegative() ? result.plus(mod) : result; } const a = BigNumber(-1) const p = BigNumber(17) console.log(positiveModulo(a, p).toString()); // 输出 16
内容的提问来源于stack exchange,提问作者Soubriquet
相关产品推荐
相关产品推荐

