如何仅使用货币代码将数字格式化为货币?

Posted

技术标签:

【中文标题】如何仅使用货币代码将数字格式化为货币?【英文标题】:How to format a number as currency using only currency code? 【发布时间】:2018-08-20 16:30:40 【问题描述】:

我的业务问题如下:我有一个货币代码(例如“USD”)和一个数字(浮点数或整数,我都可以解析),我需要使用货币将此数字格式化为货币字符串代码。例如,124.3222 和“USD”应该创建字符串“$124.32”。

我可以使用Currency.getInstance(String) 创建一个Currency 实例,它会为我提供符号和其他一些信息。但是,它没有提供任何将数字格式化为字符串的方法。另一方面,NumberFormat 包含几个静态方法,这些方法返回一个能够执行我需要的 NumberFormat 实例(例如 NumberFormat.getCurrencyInstance())。

NumberFormat 的问题在于它们都以默认语言环境或传入的语言环境为中心。鉴于此应用的性质,语言环境毫无意义。语言环境和我需要格式化为字符串的货币之间没有关联。我既不能使用默认语言环境,也没有任何类型的语言环境标识符 ISO 值。我只有货币代码。

似乎我离我很近,但到目前为止。 CurrencyNumberFormat.getCurrencyInstance 之间存在(在我看来)奇怪的脱节。 Currency 可以解析货币代码但不能解析语言环境并且不能格式化字符串,而Locale 不能解析货币代码但可以格式化字符串。我在这里遗漏了什么吗?

编辑:我应该澄清一下,我可以使用Currency 实例提供的符号和十进制计数手动格式化数字,但我不知道如何确定将符号放在字符串中的哪个位置。无论如何,我似乎应该尽可能使用内置的货币格式。

【问题讨论】:

从我对How to get NumberFormat instance from currency code? 中链接答案的解释来看,货币格式似乎是特定于区域设置的(即爱尔兰和意大利之间的小数分隔符不同)。 【参考方案1】:

我发现NumberFormat 上有一个setCurrency() 方法。所以我正在做的是调用NumberFormat.getCurrencyInstance(),这样我就得到了我的语言环境的格式化程序,然后调用setCurrency() 来获取我需要格式化的货币。这似乎可以满足我的需要。

【讨论】:

以上是关于如何仅使用货币代码将数字格式化为货币?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式将数字格式化为货币

如何将数字格式化为货币字符串

将数字格式化为货币金额

如何使用 javascript/jquery 将数字格式化为印度货币(在数据表中)

将数字数组格式化为具有最小宽度的货币

将具有多个小数位的数字格式化为货币