Ether

ethers formatEther(wei) 最多 4 位小數

  • December 2, 2021

我想用更少的小數位顯示人類可讀的餘額,就像 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);
}

儘管對您的應用程序可能並不重要,但請參閱此處獲取捨入模式列表。

引用自:https://ethereum.stackexchange.com/questions/84004