質問

DecimalFormatで丸めモードをHalf_upに設定したいのですが、EclipseはDecimalFormatクラスではSetRoundingMode()が使用できないことを教えてくれます。私のプロジェクトプロパティ(およびEclipse全体のプロパティ)は、1.6コンパイラを使用しています。 Developer.Android.comのサイトは、Java 5または6のいずれかを使用できると言っているので、問題が何であるかわかりません。

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

compleeentValueFormatter = numberformat.getNumberInstance(); DecimalFormat CompletedDecimalFormat =(decimalformat)CompletevalueFormatter; reconteddecimalformat.setRoundingMode(roundingMode.half_up);

また、Androidツールを使用してAntベースのプロジェクトを生成しようとし、プロジェクトでこのコードを試してみて、同じコンパイルエラーも取得しました。したがって、それは日食に関連しているようには見えません。 Android APIに関連しているようです。

助言がありますか?

役に立ちましたか?

解決

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

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

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

私は丸めなければならない価値で大きなdecimalを作成し、その後、スケールが自分の値を回るために必要な数字の数に設定されて、その値の大きな測定を取得します。次に、その丸い値を元のNumberformatに渡して、文字列に変換します。

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

他のヒント

これが私が問題を疑っていることです(私がドキュメントを適切に読んでいると仮定して)とそれはすごいです:

java.text.decimalformat APIドキュメントによると、実際にJava 1.6 REのランタイムインプレメーションを取得するのではなく、率直に噛むSetRoundingModeを明確に含まれていないAndroidの「拡張バージョン」を取得しています。

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

長年にわたるJavaの弱点は、Decimalformatクラスがデフォルトでhalf_round_upにデフォルトであり、JVM 1.6までそれを変更する方法がありませんでした。 Androidを見るのは残念です。

そのため、単にフォーマッタコールだけに頼るためにジョブを完了することができるのではなく、必要なアプリ全体で出力をフォーマットするために、Bigdecimal Scale Settingsを作成して出力をフォーマットしているように見えます。世界の終わりではありませんが、非常に残念なグーグル。

もちろん、その同じドキュメントは、setRondingMode()が機能すると言っているので、おそらくこれはすべてのバグですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top