【问题标题】:Format currency to local locale, but ignore .00 decimal places将货币格式化为区域设置,但忽略 0.00 位小数
【发布时间】:2015-07-11 05:46:04
【问题描述】:

我正在尝试以用户区域设置格式以与数据一起提供的相对货币显示商品的价格。

例如商品为欧元,在英国应显示为 123.64 欧元,但在法国应显示为 123.64 欧元

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

但是,让我卡住的部分是如果商品没有便士/美分价值,如何去除 .00。

我尝试过使用

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

来自DecimalFormat.html#setCurrency

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

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

我考虑过检查余数是否为 0,然后将其去掉,但这需要我检查/知道小数点分隔符是什么,虽然这可能可行,但很 hacky。

有没有人知道做所有这些事情的方法?!

【问题讨论】:

    标签: java android currency number-formatting


    【解决方案1】:

    对于删除 00,仅适用于欧元/英格兰的简单技巧是对“.00”进行字符串替换,然后替换为“”。但有些货币有 3 位或 1 位或 0 位十进制数字,因此请记住这一点。

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

    【讨论】:

    • 那行不通,因为在欧洲他们使用 ,而不是 .对于欧元和美分之间的差异。例如5,000.00 英镑或 5.000,00 欧元,如果我只是去掉 0.00 欧元,那么我会有 5,00 欧元的商品,这不准确
    【解决方案2】:

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

    setMaximumFractionDigits(int)

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 2020-01-24
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多