为了账号安全,请及时绑定邮箱和手机立即绑定

Java货币编号格式

Java货币编号格式

眼眸繁星 2019-09-24 10:26:55
有没有一种格式可以如下设置小数:100   -> "100"  100.1 -> "100.10"如果是整数,则省略小数部分。否则,格式要保留两位小数。
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

我对此表示怀疑。问题是,如果是浮点数,则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

  }

}


查看完整回答
反对 回复 2019-09-24
?
九州编程

TA贡献1785条经验 获得超4个赞

我建议使用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);

    }

}


查看完整回答
反对 回复 2019-09-24
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 355 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信