将货币格式化为本地语言环境,但忽略 .00 位小数

Format currency to local locale, but ignore .00 decimal places

我正在尝试以用户区域设置格式以随数据给出的相对货币显示商品价格。

例如该商品以欧元为单位,在英国应显示为 €123.64,但在法国应显示为 123,64 €

我希望根据用户区域设置放置货币符号和小数点分隔符。

但是,让我卡住的是如何在项目没有 pence/cents 值的情况下去除 .00。

我试过使用

NumberFormat f = NumberFormat.getInstance(loc);
if (f instanceof DecimalFormat) {
    ((DecimalFormat)f).setDecimalSeparatorAlwaysShown(false);
}

来自 DecimalFormat.html#setCurrency

但它没有货币符号,即使我尝试 f.setCurrency()。

我也试过将 getInstance 更改为 getCurrencyInstance,它现在应用货币符号,但忽略了 setDecimalSeparatorAlwaysShown(false) 部分。

我考虑过检查余数是否为 0,然后将其去除,但这需要我 checking/knowing 小数点分隔符是什么,这虽然可能可行,但非常麻烦。

有谁知道做所有这些事情的方法吗?!

对于删除 00,仅 euro/england 的一个简单技巧是对“.00”进行字符串替换,然后替换为“”。但有些货币有 3 位或 1 位或 0 位小数,因此请记住这一点。

这就是我以前从我的数据库中获取一个 int 值并以货币格式显示它并在用户输入货币值时保持这种状态,还将货币字符串转换回 int,可能会有帮助 https://github.com/nleigh/Restaurant/blob/master/Restaurant/src/uk/co/nathanleigh/restaurant/CurrencyFormat.java

好吧,我已经完全傻眼了,没注意到方法

setMaximumFractionDigits(int)

如果小数部分为 0,我现在将其设置为 0。