使用 DecimalFormat 格式化数字

新手上路,请多包涵

我正在尝试使用 DecimalFormat 格式化价格,但这并不适用于所有变体。

 DecimalFormat df = new DecimalFormat("0.##")
df.format(7.8)
df.format(85.0)

印刷

7.80

85

但是“7.79999”被格式化为“7.8”,而不是“7.80”。我试过这样做

DecimalFormat df = new DecimalFormat("0.00")

强制两个 dp,但随后“85.0”被格式化为“85.00”而不是“85”!

有没有一种方法可以捕获所有变化,以便将价格打印为#、## 或#.##?例如:

5, 55, 5.55, 5.50, 500, 500.40

原文由 Jon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 735
2 个回答

这似乎不是由一个 formatter 解决的。我建议您使用 "0.00" 格式并将 ".00" 替换为空字符串。

 public static String myFormat(double number) {
  DecimalFormat df = new DecimalFormat("0.00");
  return df.format(number).replaceAll("\\.00$", "");
}

原文由 ntalbs 发布,翻译遵循 CC BY-SA 3.0 许可协议

这两种格式之间存在细微差别。 “#.##”表示它将打印最多两位小数的数字,而“#.00”表示它将始终显示两位小数,如果小数位小于两位,它将用零替换它们。请参阅下面的输出示例。

 public static final DecimalFormat df1 = new DecimalFormat( "#.##" );
public static final DecimalFormat df2 = new DecimalFormat( "#.00" );

System.out.println(df1.format(7.80));
System.out.println(df1.format(85));
System.out.println(df1.format(85.786));

System.out.println(df2.format(7.80));
System.out.println(df2.format(85));
System.out.println(df2.format(85.786));

输出将是

7.8
85
85.79

7.80
85.00
85.79

原文由 Raza 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题