Javaでは、"###.##"
形式の文字列をfloatに解析しようとしています。文字列には常に小数点以下2桁が必要です。
Stringの値が123.00
であっても、floatは123.00
ではなく123.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
この行はあなたの問題です:
litersOfPetrol = Float.parseFloat(df.format(litersOfPetrol));
そこで、必要に応じてfloatを文字列にフォーマットしましたが、その文字列は再びfloatに変換され、stdoutで印刷したのは標準のフォーマットのfloatでした。このコードを見てください
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オブジェクトを使用するだけで、頭痛の種を大幅に節約できます。
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
BigDecimal
を使用:
new BigDecimal(theInputString);
すべての10進数を保持します。また、精度/スケールなどを格納するためにバイナリベースではなく10進数ベースを使用するため、正確な表現が確実に得られます。
また、明示的に要求しない限り、float
やdouble
のように精度が低下することはありません。
その文字列を変換した後、浮動小数点数も小数点以下2桁になることを確認したいだけです。
浮動小数点数はhave小数点以下桁数を持たないため、できません。これらにはbinaryの桁がありますが、小数点以下の桁とは一致しません。
小数点以下が必要な場合は、小数点を使用します。
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);
Float.parseFloat() は、newfloat
を返すため問題です。
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));