web-dev-qa-db-ja.com

Javaで小数点以下2桁の文字列を10進数に変換します

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
5
adityag

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

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オブジェクトを使用するだけで、頭痛の種を大幅に節約できます。

11
David Hofmann

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
12
Eric Leschinski

BigDecimalを使用:

new BigDecimal(theInputString);

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

また、明示的に要求しない限り、floatdoubleのように精度が低下することはありません。

5
fge

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

浮動小数点数はhave小数点以下桁数を持たないため、できません。これらにはbinaryの桁がありますが、小数点以下の桁とは一致しません。

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

3
user207421
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);
2
GKlimov

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));
1
NINCOMPOOP