如何以货币格式格式化小数?

新手上路,请多包涵

有没有一种方法可以将小数格式化如下:

 100   -> "100"
100.1 -> "100.10"

如果是整数,则省略小数部分。否则格式化为两位小数。

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

阅读 511
2 个回答

我对此表示怀疑。问题是如果 100 是浮点数,它永远不会是 100,它通常是 99.9999999999 或 100.0000001 或类似的东西。

如果您确实想以这种方式格式化,则必须定义一个 epsilon,即与整数的最大距离,如果差异较小,则使用整数格式,否则使用浮点数。

这样的事情可以解决问题:

 public String formatDecimal(float number) {
  float epsilon = 0.004f; // 4 tenths of a cent
  if (Math.abs(Math.round(number) - number) < epsilon) {
     return String.format("%10.0f", number); // sdb
  } else {
     return String.format("%10.2f", number); // dj_segfault
  }
}

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

我建议使用 java.text 包:

 double money = 100.1;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String moneyString = formatter.format(money);
System.out.println(moneyString);

这具有特定于语言环境的额外好处。

但是,如果必须的话,截断你返回的字符串,如果它是一整美元的话:

 if (moneyString.endsWith(".00")) {
    int centsIndex = moneyString.lastIndexOf(".00");
    if (centsIndex != -1) {
        moneyString = moneyString.substring(1, centsIndex);
    }
}

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

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