Ether
ethers formatEther(wei) 最多 4 位小數
我想用更少的小數位顯示人類可讀的餘額,就像 metamask 一樣。函式 formatEther(wei) 返回一個字元串,因此為了正確舍入我需要解析它等。我想問是否有更簡單的方法或最佳實踐如何完成。
如你所說
const {utils, BigNumber} = require('ethers'); const balance = BigNumber.from('824213281784279560'); console.log(utils.formatEther(balance));
0.82421328178427956
作為字元串給出。你可以
使用 BigNumber -> 字元串
const remainder = balance.mod(1e14); console.log(utils.formatEther(balance.sub(remainder)));
0.8242
作為字元串給出。使用 BigNumber -> 字元串 -> 數字 -> 字元串(帶截斷)
let res = utils.formatEther(balance); res = (+res).toFixed(4); console.log(res);
0.8242
作為字元串給出。使用 BigNumber -> 字元串 -> 數字(四捨五入)
let res = utils.formatEther(balance); res = Math.round(res * 1e4) / 1e4; console.log(res);
給出
0.8242
數字。
以下是兩種不同的方法,
str
以 function 返回的字元串形式給出formatEther
:選項1:
function truncate(str, maxDecimalDigits) { if (str.includes('.')) { const parts = str.split('.'); return parts[0] + '.' + parts[1].slice(0, maxDecimalDigits); } return str; }
選項#2:
const Decimal = require('decimal.js'); function truncate(str, maxDecimalDigits) { const num = new Decimal(str); return num.toFixed(maxDecimalDigits, Decimal.ROUND_DOWN); }
儘管對您的應用程序可能並不重要,但請參閱此處獲取捨入模式列表。