bignumber.js とは
任意精度の算術演算用の JavaScript ライブラリです。
簡単に内容をいうと、big.js は、最小限の任意精度ライブラリ、bignumber.js は、除算を伴う演算が使用されない限り、精度が失われることを心配する必要がないため、おそらく金融アプリケーションに適していて、decmal.js は、非常に小さい値または大きい値をより効率的に処理できるため、より科学的なアプリケーションに適している可能性があるとのこと
任意精度の算術演算用の JavaScript ライブラリです。
簡単に内容をいうと、big.js は、最小限の任意精度ライブラリ、bignumber.js は、除算を伴う演算が使用されない限り、精度が失われることを心配する必要がないため、おそらく金融アプリケーションに適していて、decmal.js は、非常に小さい値または大きい値をより効率的に処理できるため、より科学的なアプリケーションに適している可能性があるとのこと
npm install bignumber.js
const BigNumber = require('bignumber.js');
HTMLファイルに埋め込んで利用するには、CDNを利用します。
<script src='https://cdn.jsdelivr.net/npm/bignumber.js@9.1.2/bignumber.min.js'></script>
bignumber.js で端数処理の設定をするには、「 config 」を使います。
次の場合は、小数点以下第5位で切り下げするという設定です。
BigNumber.config({ DECIMAL_PLACES: 5, ROUNDING_MODE: 0 });
DECIMAL_PLACES は、小数点以下の桁数。ROUNDING_MODE は、丸めモードです。
そのほかにも、設定小目があります。公式サイト参照してください。
次の表は、丸めモードの設定内容です。
キーワード | 値 | 説明 |
---|---|---|
ROUND_UP | 0 | 切り上げ(0から離れていく) |
ROUND_DOWN | 1 | 切り下げ(0へと近づいていく) |
ROUND_CEIL | 2 | 切り上げ(正の方向へ) |
ROUND_FLOOR | 3 | 切り下げ(負の方向へ) |
ROUND_HALF_UP | 4 | 四捨五入(0から離れていく) |
ROUND_HALF_DOWN | 5 | 四捨五入(0へと近づいていく) |
ROUND_HALF_EVEN | 6 | 基本は四捨五入だが、5の場合には、偶数になる方に丸められる |
ROUND_HALF_CELL | 7 | 四捨五入(正の方向へ) |
ROUND_HALF_FLOOR | 8 | 四捨五入(負の方向へ) |
小数点切り捨てと切り下げの違いは、次のような違いです。
意味 | 例 | |
---|---|---|
切り捨て | 求める位未満の端数を捨てる | 11.35 → 11、-1.5 → -1 |
切り下げ | 数値が小さくなるほうに向かって端数を処理 | 11.35 → 11、-1.5 → -2、-111.795 → -112、111.795 → 111 |
設定のデフォルト値は、DECIMAL_PLACES : 20、ROUNDING_MODE : ROUND_HALF_UP(四捨五入)
四則演算をするには、次のようにします。
const BigNumber = require('bignumber.js');
// 足し算
console.log(BigNumber(10).plus(10).toString());
// 引き算
console.log(BigNumber(10).minus(4).toString());
// 掛け算
console.log(BigNumber(10).times(4).toString());
// 割り算
console.log(BigNumber(10).div(4).toString());
// 割り算の整数
console.log(BigNumber(10).idiv(4).toString());
// 割り算の剰余
console.log(BigNumber(10).mod(4).toString());
指定した精度で端数処理するには、dp を私用します。
const BigNumber = require('bignumber.js');
BigNumber.config({ DECIMAL_PLACES: 5, ROUNDING_MODE: 1 });
console.log(BigNumber(1).div(3).toString());
console.log(BigNumber(1).div(3).dp(2).toString());