您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java货币编号格式

Java货币编号格式

我对此表示怀疑。问题是,如果是浮点数,则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
  }
}
double amount =200.0;
Locale locale = new Locale("en", "US");      
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(locale);
System.out.println(currencyFormatter.format(amount));

要么

double amount =200.0;
System.out.println(NumberFormat.getCurrencyInstance(new Locale("en", "US"))
        .format(amount));

显示货币的最佳方法

输出

$ 200.00

如果你不想使用符号,请使用此方法

double amount = 200;
DecimalFormat twoPlaces = new DecimalFormat("0.00");
System.out.println(twoPlaces.format(amount));
200.00

也可以使用(带千位分隔符)

double amount = 2000000;    
System.out.println(String.format("%,.2f", amount));          
2,000,000.00

我建议使用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);
    }
}
java 2022/1/1 18:18:28 有474人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶