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

在Java中,我试图将一串格式"###.##"解析为浮点数。 该字符串应始终具有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 

这行是你的问题:

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

Java将String转换为十进制:

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

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

除非您明确要求,否则它不会像floatdouble一样受到精确损失。

 litersOfPetrol = Float.parseFloat(df.format(litersOfPetrol)); System.out.println("liters of petrol before putting in editor : "+litersOfPetrol); 

Float here打印Float here ,根本没有格式。

要打印格式化的浮点数,只需使用

 String formatted = df.format(litersOfPetrol); System.out.println("liters of petrol before putting in editor : " + formatted); 

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

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

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

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