有没有一种格式可以如下设置小数:
100 -> "100" 100.1 -> "100.10"
如果是整数,则省略小数部分。否则,格式要保留两位小数。
我对此表示怀疑。问题是,如果是浮点数,则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); } }