float a= (float) 1846.4;
NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);
float b = Float.parseFloat( df.format(a));
设置浮点数的小数位数的最佳方法是什么(我只想设置浮点数的两个小数位,可以是2013.43452或2392.2)?现在我得到了像Exception in thread "main" java.lang.NumberFormatException: For input string: "1,846.40"
这样的异常。
发布于 2012-04-13 08:19:00
我认为导致NFE的直接问题是字符串中的千个分隔符,而不是小数位数。字符串中既有','
又有'.'
,parseFloat
不喜欢这样。
但是,请注意,您无法确定float
值中的小数位数-这完全是一个格式问题。具体地说,尾随的0
在浮点值中没有意义,因此默认情况下不会显示。您需要在输出点根据您的需要格式化该值(当您将其转换为可显示的String
时,例如通过使用DecimalFormat
,如上面所做的)。
发布于 2012-04-13 08:24:42
听起来您只是想四舍五入到小数点后两位。
数字格式和乱七八糟的字符串不是你想要的。
试试这个:
float b = Math.round(a * 100)/100.0f;
发布于 2012-04-13 08:25:19
要让格式化+解析正常工作,只需再次使用df
:
float b = df.parse( df.format(a));
然而,我仍然看不出这有什么意义。您不能定义浮点数的小数位数。1846.40与1846.4或1846.400相同,尾随的零完全无关。
当你有输出的时候,这些数字就开始起作用了,比如把数字写到字符串中。但也有其他工具可以做到这一点,例如字符串格式模式。
如果需要在内部限制小数位数,请使用BigDecimal
,您可以在其中设置小数位数,从而定义它表示的小数位数。
https://stackoverflow.com/questions/10137406
复制