4

DecimalFormat で丸めモードを HALF_UP に設定したいのですが、Eclipse から、DecimalFormat クラスでは setRoundingMode() を使用できないことが通知されます。私のプロジェクト プロパティ (および全体的な Eclipse プロパティ) は 1.6 コンパイラを使用しています。developer.android.com サイトには、Java 5 または 6 のいずれかを使用できると記載されているため、何が問題なのかわかりません。

import java.math.RoundingMode;
import java.text.DecimalFormat;

completedValueFormatter = NumberFormat.getNumberInstance(); DecimalFormat completedDecimalFormat = (DecimalFormat)completedValueFormatter; completedDecimalFormat.setRoundingMode(RoundingMode.HALF_UP);

また、Android ツールを使用して ant ベースのプロジェクトを生成しようとしましたが、プロジェクトでこのコードを試してみましたが、同じコンパイル エラーが発生しました。したがって、Eclipse とは関係がないようです。Android API に関連しているようです。

助言がありますか?

4

3 に答える 3

8

これは、Java 6 の .setRoundingMode(RoundingMode) メソッドを DecimalFormat で使用できない理由の本当の答えにはなりませんが、少なくとも回避策です。

int numDigitsToShow = this.completedValueFormatter.getMaximumFractionDigits();
BigDecimal bigDecimal = new BigDecimal(valueToBeRounded);
BigDecimal roundedBigDecimal = bigDecimal.setScale(numDigitsToShow, RoundingMode.HALF_UP);

return this.completedValueFormatter.format(roundedBigDecimal.doubleValue());

丸める必要がある値で BigDecimal を作成し、値を丸める必要がある桁数に設定されたスケールでその値の BigDecimal を取得します。次に、その丸められた値を元の NumberFormat に渡して、String に変換します。

誰かがより良い解決策を持っているなら、私はすべての耳です!

于 2010-11-01T21:22:58.900 に答える
3

問題は次のとおりです(ドキュメントを適切に読んでいると仮定します)。

java.text.DecimalFormat API ドキュメントによると、実際には Java 1.6 RE のランタイム実装を取得していませんが、率直に言って setRoundingMode を含まない Android の「拡張バージョン」を取得しています。

「これは、RI の標準バージョンに基づく DecimalFormat の拡張バージョンです。新しい機能または変更された機能には NEW というラベルが付けられています。」

Java の長年にわたる弱点は、DecimalFormat クラスのデフォルトが HALF_ROUND_UP であり、JVM 1.6 までそれを変更する方法がありませんでした。残念なことに、Android がこの必要性を生かし続けているのを見るのは残念です。

そのため、単純にフォーマッタ呼び出しだけに頼ってジョブを完了させるのではなく、BigDecimal スケール設定を使用して、出力を必要とするすべてのアプリで出力をフォーマットすることに行き詰まっているようです。世界の終わりではありませんが、非常に残念なGoogleです。

もちろん、同じドキュメントには setRondingMode() が機能すると書かれているので、おそらくこれは完全なバグでしょうか??

于 2011-06-09T20:04:38.403 に答える
-1

これが最良のオプションだと思います http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#ceil(double )

于 2010-11-01T19:56:54.633 に答える