再会。
我需要在java中格式化一个数字。到目前为止,我有这个:
DecimalFormat df2 = new DecimalFormat( "#,###,###,##0.00" );
System.out.println(new Double(df2.format(balance)).doubleValue());
但它打印出这个
110.0
121.0
133.1
146.41
161.05
但我需要它在小数部分有两位数。我该怎么做?
再会。
我需要在java中格式化一个数字。到目前为止,我有这个:
DecimalFormat df2 = new DecimalFormat( "#,###,###,##0.00" );
System.out.println(new Double(df2.format(balance)).doubleValue());
但它打印出这个
110.0
121.0
133.1
146.41
161.05
但我需要它在小数部分有两位数。我该怎么做?
您不必从格式化字符串中获取双精度值。只需使用从format()
方法返回的格式化字符串DecimalFormat
。因此,您的代码应如下所示:
DecimalFormat df2 = new DecimalFormat( "#,###,###,##0.00" );
...
System.out.println(df2.format(balance));
您的原始代码:
System.out.println(new Double(df2.format(balance)).doubleValue());
您在代码中所做的是:将双精度值格式化为字符串(按照您在DecimalFormat
实例中指定的格式)。然后将格式化字符串转换为Double
实例并从对象中获取双精度值,即双精度值。然后将其打印到控制台。所以格式化的字符串消失了,双精度值正常打印。
“但我需要它的小数部分有两位数。我该怎么做?”
DecimalFormat df2 = new DecimalFormat( );
df2.setMinimumFractionDigits(2);
df2.setMaximumFractionDigits(2);
System.out.println(df2.format(balance));
您也可以使用以下setMinimumFractionDigits
方法DecimalFormat
df2.setMinimumFractionDigits(2);
您的十进制格式是正确的,但是在打印出来之前您正在做的是new Double(df2.format(balance))
创建新的双倍瞬间,这会忽略您的格式。
所以如果你想显示或记录你的价值 df2.format(balance)
,这应该足够了
IE:
System.out.println(df2.format(balance));
试试这个模式进行格式化#,###,###,##.##
-
DecimalFormat df2 = new DecimalFormat( "#,###,###,##.##" );
System.out.println(df2.format(balance));
这应该足够了:
DecimalFormat df2 = new DecimalFormat("#,##0.00");
System.out.println(df2.format(balance));
分隔符的分组将遵循“最后一个与整数末尾之间的间隔”。因此,过度指定没有任何好处。文档中的示例DecimalFormat
:
分组分隔符通常用于千位,但在某些国家/地区,它分隔万位。分组大小是分组字符之间的恒定位数,例如 3 表示 100,000,000 或 4 表示 1,0000,0000。如果您提供具有多个分组字符的模式,则最后一个和整数末尾之间的间隔就是所使用的间隔。所以
"#,##,###,####" == "######,####" == "##,####,####"
。
另一件事是该.format()
方法已经输出了一个字符串,因此将其转换为double
. balance
超过1000(分隔符生效,Double
类无法解析带分隔符的字符串)时会引发异常。