在Java中将字符串转换为带有2个小数位的十进制数

时间:2013-07-04 07:50:03

标签: java string floating-point number-formatting

在Java中,我试图将一个格式为"###.##"的字符串解析为float。该字符串应始终具有2个小数位。

即使String的值为123.00,浮点数也应为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

6 个答案:

答案 0 :(得分:11)

Java将字符串转换为十进制:

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

答案 1 :(得分:7)

这一行是你的问题:

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

在那里你根据需要将你的浮动格式化为字符串,但是然后该字符串再次转换为浮点数,然后你在stdout中打印的是你的浮点数得到标准格式。看看这段代码

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对象,它会为你省去很多麻烦。

答案 2 :(得分:5)

使用BigDecimal

new BigDecimal(theInputString);

它保留所有小数位。并且你确定准确的表示,因为它使用十进制基数而不是二进制基数来存储精度/比例/等。

除非您明确要求,否则它不会受到floatdouble等精确损失的影响。

答案 3 :(得分: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);

答案 4 :(得分:2)

  

我只是想确保在转换该字符串后浮点数也会有2位小数。

你不能,因为浮点数不小数位。它们有二进制位置,与小数位不相称。

如果需要小数位,请使用小数基数。

答案 5 :(得分:1)

Float.parseFloat()是问题,因为它返回 float

  

返回一个初始化为由指定String表示的值的新float,由Float类的valueOf方法执行。

您只是为了显示而格式化。这并不意味着float将在内部以相同的格式表示。

您可以使用java.lang.BigDecimal

我不确定你为什么两次使用parseFloat()。如果您想以某种格式显示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));