9

"###.##"Java では、フォーマットの文字列をフロートに解析しようとしています。文字列は常に小数点以下 2 桁にする必要があります。

String が valueであっても、float もではなく123.00であるべきです。123.00123.0

これは私がこれまでに持っているものです:

System.out.println("string liters of petrol putting in preferences is " + stringLitersOfPetrol);

Float litersOfPetrol = Float.parseFloat(stringLitersOfPetrol);

DecimalFormat df = new DecimalFormat("0.00");
df.setMaximumFractionDigits(2);

litersOfPetrol = Float.parseFloat(df.format(litersOfPetrol));

System.out.println("liters of petrol before putting in editor: " + litersOfPetrol);

それは印刷します:

string liters of petrol putting in preferences is 010.00 
liters of petrol before putting in editor: 10.0
4

6 に答える 6

16

Java は文字列を 10 進数に変換します。

String dennis = "0.00000008880000";
double f = Double.parseDouble(dennis);
System.out.println(f);
System.out.println(String.format("%.7f", f));
System.out.println(String.format("%.9f", new BigDecimal(f)));
System.out.println(String.format("%.35f", new BigDecimal(f)));
System.out.println(String.format("%.2f", new BigDecimal(f)));

これは以下を出力します:

8.88E-8
0.0000001
0.000000089
0.00000008880000000000000106383001366
0.00
于 2014-01-05T21:05:39.263 に答える
16

この行はあなたの問題です:

litersOfPetrol = Float.parseFloat(df.format(litersOfPetrol));

そこで、フロートを必要に応じて文字列にフォーマットしましたが、その文字列が再びフロートに変換され、標準出力に出力したのは、標準のフォーマットを取得したフロートでした。このコードを見てください

import java.text.DecimalFormat;

String stringLitersOfPetrol = "123.00";
System.out.println("string liters of petrol putting in preferences is "+stringLitersOfPetrol);
Float litersOfPetrol=Float.parseFloat(stringLitersOfPetrol);
DecimalFormat df = new DecimalFormat("0.00");
df.setMaximumFractionDigits(2);
stringLitersOfPetrol = df.format(litersOfPetrol);
System.out.println("liters of petrol before putting in editor : "+stringLitersOfPetrol);

ちなみに、小数を使用したい場合は、他の人が提案したように double と float の存在を忘れて、BigDecimal オブジェクトを使用するだけで、頭痛の種が大幅に軽減されます。

于 2013-07-04T08:11:59.397 に答える
7

使用BigDecimal:

new BigDecimal(theInputString);

すべての 10 進数が保持されます。また、精度/スケールなどを格納するために2進数ではなく10進数を使用するため、正確な表現が確実です。

また、明示的に要求しない限り、float精度が失われることはありません。double

于 2013-07-04T07:56:08.857 に答える
3

その文字列を変換した後、浮動小数点数にも小数点以下2桁があることを確認したいだけです。

浮動小数点数には小数点以下の桁数がないため、できません。それらには、小数点以下の桁数と釣り合っていない2 進数の桁があります。

小数点以下の桁数が必要な場合は、10 進数を使用します。

于 2013-07-04T10:22:37.770 に答える
2
litersOfPetrol = Float.parseFloat(df.format(litersOfPetrol));

System.out.println("liters of petrol before putting in editor : "+litersOfPetrol);

Float hereフォーマットがまったくない を出力します。

フォーマットされたフロートを印刷するには、単に使用します

String formatted = df.format(litersOfPetrol);
System.out.println("liters of petrol before putting in editor : " + formatted);
于 2013-07-04T07:58:03.707 に答える
1

Float.parseFloat()new floatを返すため問題です。

クラス Float の valueOf メソッドによって実行されるように、指定された String によって表される値に初期化された新しい float を返します。

表示のためだけにフォーマットしています。float内部的に同じ形式で表現されるわけではありません。

java.lang.BigDecimalを使用できます。

なぜあなたがparseFloat()2回使用しているのかわかりません。特定のフォーマットで表示したい場合はfloat、フォーマットして表示するだけです。

Float litersOfPetrol=Float.parseFloat(stringLitersOfPetrol);
DecimalFormat df = new DecimalFormat("0.00");
df.setMaximumFractionDigits(2);
System.out.println("liters of petrol before putting in editor"+df.format(litersOfPetrol));
于 2013-07-04T07:55:54.033 に答える