Androidの小数形式で半分を丸めます
質問
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()が機能すると言っているので、おそらくこれはすべてのバグですか?