0
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

4 回答 4

3

我认为导致 NFE 的直接问题是字符串中的千位分隔符,而不是小数位数。您在字符串中有 a','和 a ,并且不喜欢那样。'.'parseFloat

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

于 2012-04-13T08:19:00.380 回答
1

听起来您只想四舍五入到小数点后两位。

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

尝试这个:

float b = Math.round(a * 100)/100.0f;
于 2012-04-13T08:24:42.310 回答
1

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

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

但是,我仍然认为这没有任何意义。您无法定义浮点数中的小数位数。1846.40 与 1846.4 或 1846.400 相同,尾随零完全不相关。

当您有输出时,这些数字就会发挥作用,例如将数字写入字符串。但是还有其他工具可以做到这一点,例如字符串格式模式。

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

于 2012-04-13T08:25:18.820 回答
0

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

没有一个。浮点数没有小数位。他们有二进制的地方。

如果你想要小数位,你必须使用小数基数,要么是 a 要么BigDecimalDecimalFormat.format().

于 2012-04-13T10:04:20.380 回答