使用 BigNumber 处理舍入问题

Kir*_*ash 1 javascript bignumber.js

我正在尝试减去两个小数位数更多的数字。但它正在四舍五入。如何使用 BigNumber 来确保数字不四舍五入并且计算精确。

const myObj = {
  total: 5000000,
  filled: 4999999.9999999996870756
};

const total = new BigNumber(myObj.total);
const filled = new BigNumber(myObj.filled);
const remaining = total.minus(filled);
console.log(total, filled, remaining);

if(remaining === 0.0000000003129244) console.log("remaining  calculation is correct")
else console.log("incorrect calculation")
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/8.0.2/bignumber.min.js" integrity="sha512-7UzDjRNKHpQnkh1Wf1l6i/OPINS9P2DDzTwQNX79JxfbInCXGpgI1RPb3ZD+uTP3O5X7Ke4e0+cxt2TxV7n0qQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
Run Code Online (Sandbox Code Playgroud)

Sah*_*nol 5

首先,您需要定义字符串变量以不将其四舍五入。之后,为了比较 bigNumber 的值,最好使用“ compareTo ”引用文档

const myObj = {
  total: '5000000',
  filled: '4999999.9999999996870756'
};

const total = new BigNumber(myObj.total);
const filled = new BigNumber(myObj.filled);
const remaining = total.minus(filled);
console.log('total',total);
console.log('filled',filled);
console.log('remaining', remaining);

if(remaining.comparedTo(0.0000000003129244) === 0) console.log("remaining  calculation is correct")
else console.log("incorrect calculation")
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/8.0.2/bignumber.min.js" integrity="sha512-7UzDjRNKHpQnkh1Wf1l6i/OPINS9P2DDzTwQNX79JxfbInCXGpgI1RPb3ZD+uTP3O5X7Ke4e0+cxt2TxV7n0qQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
Run Code Online (Sandbox Code Playgroud)