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"
一样得到例外。
答案 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设置小数位的最佳方法是什么
没有一个。浮点数没有小数位。他们有二进制位置。
如果你想要小数位数,你必须使用小数基数,BigDecimal
或DecimalFormat.format()
的结果。