1. ホーム
  2. javascript

[解決済み] JavaScriptでBigDecimal

2022-03-10 05:28:29

質問

私はJavaScriptの初心者で(Java出身)、少額のお金で金融計算をしようと思っています。

私が最初に行ったのは

<script type="text/javascript">
    var normBase = ("[price]").replace("$", "");
    var salesBase = ("[saleprice]").replace("$", "");
    var base;
    if (salesBase != 0) {
        base = salesBase;
    } else {
        base = normBase;
    }
    var per5  = (base - (base * 0.05));
    var per7  = (base - (base * 0.07));
    var per10 = (base - (base * 0.10));
    var per15 = (base - (base * 0.15));
    document.write
        (
        '5% Off: $'  + (Math.ceil(per5  * 100) / 100).toFixed(2) + '<br/>' +
        '7% Off: $'  + (Math.ceil(per7  * 100) / 100).toFixed(2) + '<br/>' +
        '10% Off: $' + (Math.ceil(per10 * 100) / 100).toFixed(2) + '<br/>' +
        '15% Off: $' + (Math.ceil(per15 * 100) / 100).toFixed(2) + '<br/>'
    );
</script>

これは、常に切り上げられることを除けば、うまくいきました ( Math.ceil ). Math.floor も同じ問題があり Math.round もフロートには使えない。

Javaでは、最初からfloatの使用を完全に避けていたのですが、JavaScriptでは、それに匹敵するものがデフォルトで含まれていないようです。

問題は、紹介されたライブラリはすべて壊れているか、別の目的のものであるということです。その jsfromhell.com/classes/bignumber ライブラリは私が必要とするものに非常に近いのですが、丸めや精度に関して奇妙な問題を抱えています...。Round Typeを何に設定しても、勝手に決定されてしまうようです。例えば、3.7107で精度が2、Round Typeが ROUND_HALF_UP 3.71のはずが、なぜか3.72になってしまう。

JasonSmithのBigDecimalライブラリ(JavaのBigDecimalを機械的に移植)も試しましたが、node.js用のようで、私には実行するオプションがありません。

どうすればバニラJavaScriptを使ってこれを達成できるのか(そして信頼できるのか)、あるいはメンテナンスされていて壊れていない、私が使える最新の(上記のものはすべてもう何年も前の)ライブラリはあるのでしょうか?

どのように解決するのですか?

を使うのが好きです。 accounting.js は、数字、お金、通貨の書式設定に使用します。

ホームページ - https://openexchangerates.github.io/accounting.js/

ギズーブ - https://github.com/openexchangerates/accounting.js