2

誰もこれに出くわしたことがありますか:

System.out.println("value of: " + Float.valueOf("3.0f")); // ok, prints 3.0
System.out.println(new BigDecimal("3.0f").floatValue()); // NumberFormatException

ここでの一貫性の欠如は、BigDecimal(String) が Float.valueOf() と同じ仕様に従っていないバグであると主張します (JDK ドキュメントを確認しました)。

強制的に BigDecimal を通過させるライブラリを使用していますが、そこに "3.0f" を送信する必要がある場合があります。既知の回避策はありますか (ライブラリでは BigDecimal にアクセスできません)。

4

2 に答える 2

4

2 番目の例は、ドキュメントfが文字列内のan に関して何も言及していないため、機能しません。

文字列表現は、オプションの記号'+'( '\u002B') または'-'( '\u002D') で構成され、その後に 0 個以上の 10 進数 (「整数」) のシーケンスが続き、オプションで分数が続き、オプションで指数が続きます...

回避策は、文字列から単純に削除することですf。それなら有効なはずです。

于 2012-11-13T21:41:28.763 に答える
0

BigDecimalには独自のドキュメントがあります。BigDecimaljavadocによる

このコンストラクターは、Float.toString(float)およびDouble.toString(double)によって返される値と互換性があります。

Float.valueOf()については何も言及されていません。

于 2012-11-14T20:48:01.073 に答える