BigDecimal の 2 つの限られた精度の代替手段、つまり DecimalInt と DecimalLong を作成することを検討しています。これらは int と long の実際の範囲内で任意の小数点以下桁数の数値を処理でき、変更可能な形式と変更不可能な形式の両方で作成できます。私の計画は、DecimalInt を +/-999,999,999 から +/- 0.999999999 までサポートし、DecimalLong を同じように、ただし最大 18 桁までサポートすることです。
これは、スケーリングされた int または long として格納された実際の値とともに、DecimalInt の 0 ~ 9 および DecimalLong の 0 ~ 18 の 10 進数のカウント値を維持することによって行われます。通常は、通貨や株価などの少数の小数点以下の桁数 (通常は 2 ~ 4 桁) に使用されます。
必須要件は、(a) 無駄のないフットプリント (2 つのクラスと OverflowException)、および (b) すべての基本演算と意味のあるすべての Math の完全なサポートです。
結果をグーグルで検索しても、明らかなヒットは返されませんでした。それらはすべて、任意の小数に関連しているように見えました。
私の質問は次のとおりです。これはすでに行われていますか? これには、まだ実行されていない理由である隠れた微妙な点がありますか? Java が DotNet のような 10 進数型をサポートしているという噂を聞いたことがありますか。
編集:これは BigDecimal とは異なります。(a) int の配列を処理しない方がはるかに効率的であり、(b) BigInteger をラップしないため、メモリにも負担がかかりません。 (c) 変更可能なオプションがあるため、そこでも高速になります。要約すると、「BigDecimal のオーバーヘッドと double の不正確さなしに銀行残高を保存したい」などの単純なユース ケースのオーバーヘッドが少なくなります。
編集: 877.85 ではなく 1586.60-708.75=877.8499999999999 という古典的な問題を回避するために、int または long を使用してすべての計算を行うつもりです。