首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Numberformat似乎忽略了Android中的小数位--但仅适用于美元和德国。

问Numberformat似乎忽略了Android中的小数位--但仅适用于美元和德国。
EN

Stack Overflow用户
提问于 2014-06-12 19:25:32
回答 1查看 4.2K关注 0票数 3

我有一个非常奇怪的错误,NumberFormat似乎忽略了我设置的分数位。我使用这个相当简单的方法将表示货币的双值格式化为特定于区域设置的字符串,以在屏幕上显示:

代码语言:javascript
复制
public static String formatValueString(String currencyISO, double value) {
    NumberFormat numberFormat = NumberFormat.getCurrencyInstance();
    if (value != Math.floor(value)) {
        numberFormat.setMinimumFractionDigits(2);
        numberFormat.setMaximumFractionDigits(2);
    } else {
        numberFormat.setMinimumFractionDigits(0);
        numberFormat.setMaximumFractionDigits(0);
    }
    numberFormat.setCurrency(java.util.Currency.getInstance(currencyISO));
    String result = numberFormat.format(value);
    return result;
}

它应该只在需要时显示2位小数点,根据setCurrency的文档,这应该是可行的:

设置此数字格式在格式化货币值时使用的货币。最小和最大分数位数保持不变。

好吧..。它大部分时间都能用。当设备语言设置为德语时,带有ISO "GBP“的2.0被正确地格式化为”2GB“,而在美国设置为英语时,则正确地将”GB2“格式化为”2GB“。

但是,当设置为德语时,以“美元”作为ISO的2.0将产生"2,00美元“。所有其他语言和所有其他货币,我已经测试了预期的工作。

我真的不知道,我可能做错了什么,因为它只在一个特定的情况下不起作用。有什么想法吗?

编辑:

我尝试了这个简化的版本:

代码语言:javascript
复制
public static String formatValueString(String currencyISO, double value) {
    NumberFormat numberFormat = NumberFormat.getCurrencyInstance();
    numberFormat.setMinimumFractionDigits(0);
    numberFormat.setMaximumFractionDigits(0);
    numberFormat.setCurrency(java.util.Currency.getInstance(currencyISO));
    String result = numberFormat.format(value);
    return result;
}

同样的结果,仍然显示了两个小数位不应该在那里(同样,只有美元在德语),Math.floor部分绝对不是问题。

编辑2:现在用截图做这件事。忽略所有评论和其他不重要的东西。

​

以"EUR“和2.0为价值,一切都很好,结果是"2欧元”

​

但是对于“美元”和相同的值,结果现在是"2.00美元“。

在这两种情况下,maximumFractionDigits和minimumFractionDigits仍然在numberFormat对象中的setCurrency()之后正确地设置为0。

,那么这些小数位是从哪里来的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-29 13:26:45

我知道这是个老问题,但我今天也遇到了同样的问题,我能够解决这个问题。基本上,当您在NumberFormat上设置货币时,它会覆盖最小和最大分数位数。您可以在JDK代码的以下副本中看到它:https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/classes/sun/util/locale/provider/NumberFormatProviderImpl.java#L212

一旦你知道了这一点,这是相当容易解决:你只是设置货币之前,设置任何其他。

代码语言:javascript
复制
public static String formatValueString(String currencyISO, double value) {
    NumberFormat numberFormat = NumberFormat.getCurrencyInstance();
    numberFormat.setCurrency(java.util.Currency.getInstance(currencyISO));
    numberFormat.setMinimumFractionDigits(0);
    numberFormat.setMaximumFractionDigits(0);
    String result = numberFormat.format(value);
    return result;
}

就这样。现在,您应该有正确的小数位数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24192416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档