2

再会。

我需要在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

但我需要它在小数部分有两位数。我该怎么做?

4

6 回答 6

2

您不必从格式化字符串中获取双精度值。只需使用从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实例并从对象中获取双精度值,即双精度值。然后将其打印到控制台。所以格式化的字符串消失了,双精度值正常打印。

于 2012-11-12T09:32:13.400 回答
1

“但我需要它的小数部分有两位数。我该怎么做?”

DecimalFormat df2 = new DecimalFormat( );
df2.setMinimumFractionDigits(2);
df2.setMaximumFractionDigits(2);

System.out.println(df2.format(balance));
于 2012-11-12T09:31:13.647 回答
0

您也可以使用以下setMinimumFractionDigits方法DecimalFormat

df2.setMinimumFractionDigits(2);
于 2012-11-12T09:31:19.927 回答
0

您的十进制格式是正确的,但是在打印出来之前您正在做的是new Double(df2.format(balance))创建新的双倍瞬间,这会忽略您的格式。

所以如果你想显示或记录你的价值 df2.format(balance),这应该足够了

IE:

System.out.println(df2.format(balance));
于 2012-11-12T09:36:35.523 回答
0

试试这个模式进行格式化#,###,###,##.##-

DecimalFormat df2 = new DecimalFormat( "#,###,###,##.##" );
System.out.println(df2.format(balance));
于 2012-11-12T09:28:19.440 回答
0

这应该足够了:

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类无法解析带分隔符的字符串)时会引发异常。

于 2012-11-12T09:30:59.837 回答