2011-01-25 14 views
2

これは特に奇妙なものですが、GCJに対していくつかの新しいコードをコンパイルする必要があります。 JavaのBigDecimalをサポートしていません。Java BigDecimal代替ライブラリ

私が探しているのは、java.math.BigDecimalの代替手段です。

誰でも正しい方向に向けることができますか?

ありがとうございます!

+1

GCJとは何ですか?標準のJava APIの一部をサポートしていない場合、どうすれば新しいライブラリをサポートすることができますか? –

+0

gcjは*標準* Java APIの一部をサポートしていませんか?これはgcjの問題であるライブラリの問題のように思えます。 –

+1

@Nikita GCJはJavaのGnuコンパイラです - http://gcc.gnu.org/java/ - 実際にはお尻の痛みです。新しいライブラリをサポートするかどうかは本当に分かりませんが、それは完全にカプセル化されており(新しいライブラリ)、Java 1.4の構文のみを使用します。おそらく安全です。 – Frankie

答えて

3

gcjは、setScale(int scale, int roundingMode)setScale(int scale)しか提供していないJDK 1.4.2に対してコンパイルしているようです。

コンパイルしようとしているコードは、JDK 1.5.0以上で書かれたようです。 JDK 1.5.0では、他の2つに加えてsetScale(int newScale, RoundingMode roundingMode)が得られます。

1.5を使用できるようにするgcjの更新があるかどうかを確認できます。 gcj websiteを見ると、私はこれをそのようには見ません。現在のバージョンでは、1.4のライブラリの大半と1.5の追加がサポートされているという。

もう1つの方法は、setScale(int newScale, RoundingMode roundingMode)への呼び出しがsetScale(int scale, int roundingMode)に置き換えられるようにコードを書き換えることです。 1.5.0では、roundingModeの整数値を指定する代わりに(BigDecimalのstatic intを使用)、RoundingMode列挙型を使用して指定することができます(以前の方法は下位互換性のために維持されます)。

コード内でRoundingMode.CEILINGの代わりにBigDecimal.ROUND_CEILINGを使用します。

+0

Vivin、完璧に動作します。いくつかの変更を行う必要がありますが、素晴らしい作品。ありがとう! – Frankie

+0

@Frankie問題はありません。私の最初の不信を許してください。私はgcjをあまり使用していないので、そのような痛みであることは分かりませんでした! –