0

フロートを文字列にキャストするときは、ラウンド数を避ける必要があります。数がまったく同じである必要があります。

この瞬間に私がこれを作ると:

String value =  String.valueOf(1234567.99);

値=1234568.0なので、キャスト後に値=1234567.99が必要です。

4

3 に答える 3

3

1234567.99フロートとして正確に表すことはできません。最も近いフロートは実際には1234568に等しいです。

より高い精度が必要な場合は、doubleを使用できます1234567.99d。期待どおりに動作します。

この簡単なテストを実行して確認できます(Javaの場合ですが、Androidではを置き換えることで簡単にトランスポゾンできますprintln)。

public static void main(String[] args) {
    float f = 1234567.99f;
    double d = 1234567.99d;
    System.out.println(new BigDecimal(f));
    System.out.println(new BigDecimal(d));
}

プリント:

1234568
1234567.98999999999068677425384521484375

注:String.valueOf(double)同じdoubleの、小数点以下の少ない別の表現にdoubleを丸めます。つまり、上記のよう1234567.99dにdoubleとして表すことはできず、最も近いdoubleは1234567.98999999999068677425384521484375です。しかしString.valueOf、言語の仕様によれば、それらは事実上同じdoubleであるため、それを理解し、そのdoubleの最初の表現(小数点以下2桁のみ)を使用します。

于 2012-11-20T18:47:30.210 に答える
1

String.valueOf()他の問題がある数値を四捨五入することはありませんが、次のように試すことができます。

String value =  ""+1234567.99;
于 2012-11-20T18:43:55.260 に答える
0
String s = Double.toString(1234567.99);

更新:文字列の形式をより細かく制御するには、DecimalFormatDecimalFormatSymbolsを使用します

例えば:

java.text.DecimalFormat formater = new java.text.DecimalFormat();
formater.setMinimumFractionDigits(0);
formater.setMaximumFractionDigits(3);
formater.setGroupingUsed(false);
java.text.DecimalFormatSymbols dfs = new java.text.DecimalFormatSymbols();
dfs.setNaN("NaN");
formater.setDecimalFormatSymbols(dfs);
String s = formater.format(1234567.99);
于 2012-11-20T18:47:59.527 に答える