将小数位设置为浮点值

时间:2012-04-13 08:15:25

标签: java number-formatting

float a= (float) 1846.4;

NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);

float b = Float.parseFloat( df.format(a));

为浮点数设置小数位的最佳方法是什么(我只想设置浮点值的2位小数,可以是2013.43452或2392.2)?现在我像E xception in thread "main" java.lang.NumberFormatException: For input string: "1,846.40"一样得到例外。

4 个答案:

答案 0 :(得分:3)

我认为导致NFE的直接问题是字符串中的千位分隔符,而不是小数位数。您在字符串中同时拥有',''.'parseFloat不喜欢这样。

但请注意,您无法修复float值中的小数位数 - 这完全是格式化问题。具体来说,尾随0在浮点值中没有意义,因此默认情况下不会显示。您需要在输出时根据您的意愿格式化值(将其转换为可显示的String时,例如使用DecimalFormat,如上所述。)

答案 1 :(得分:1)

听起来你只想要四舍五入到两位小数。

字符串格式和字符串不是你想去的地方。

试试这个:

float b = Math.round(a * 100)/100.0f;

答案 2 :(得分:1)

要使格式化+解析工作,只需再次使用df

float b = df.parse( df.format(a));

然而,我仍然没有看到任何意义。 无法定义浮点数中的小数位数。 1846.40与1846.4或1846.400相同,尾随零完全无关。

当您有输出时,这些数字会起作用,例如将数字写入字符串。但是还有其他设施,例如字符串格式模式。

如果您需要在内部限制分数位数,请使用BigDecimal,您可以在其中设置比例,从而定义它所代表的小数位数。

答案 3 :(得分:0)

  

为float设置小数位的最佳方法是什么

没有一个。浮点数没有小数位。他们有二进制位置。

如果你想要小数位数,你必须使用小数基数,BigDecimalDecimalFormat.format()的结果。