gpt4 book ai didi

java - 如何在 ICU4J 中的 MessageFormat 中自定义货币格式

转载 作者:太空宇宙 更新时间:2023-11-04 08:17:40 25 4
gpt4 key购买 nike

我有一个生成大量文档的系统。其内容在 ResourceBundles 中定义。

我想自定义 MessageFormat 打印货币值的方式。有时我希望它显示没有小数位的货币(但并非总是如此)。

这应该按预期工作,但事实并非如此:

System.err.println(
com.ibm.icu.text.MessageFormat.format(
"{0,number,\u00A4#}",
new com.ibm.icu.util.CurrencyAmount(1,
com.ibm.icu.util.Currency.getInstance("USD"))));

不幸的是它打印出来:

US$1,00

你们中有人在资源包“属性”文件中使用自定义货币格式吗?

我不想在系统范围内更改它。

顺便说一句,这与 java.text.MessageFormat 配合得很好。

最佳答案

好的,我再次阅读了您的问题。我真的不知道你为什么要砍掉美分部分(在美国,这在韩国或日本是有意义的,因为他们根本不使用它们)。
不管怎样,我不认为只截掉美分部分是个好主意,但如果你想这样做,就像使用 NumberFormat 和 setMaximumIntegerDigits(int) 一样简单。 .

顺便说一句,我仍然不知道为什么通过使用资源包你不能使用 NumberFormat 。您仍然可以在 MessageFormat.format() 中调用格式化程序:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(Locale.US);
currencyFormatter.setMaximumFractionDigits(0);
System.err.println(MessageFormat.format("Some amount: {0}.",
currencyFormatter.format(1d)));

可以预见它打印出来:

Some amount: $1.

如果您需要保留货币,我建议通过保留本地格式来使用 setCurrency(Currency) 方法 - 无论如何,您都会在Internalization 标记中提出这个问题。

<小时/>

编辑:包括有关 MessageFormat 功能的信息

如果您需要为区域设置使用自定义货币格式,则实际上需要实例化 MessageFormat 类(常规静态 MessageFormat.format(String, Object...) 在 Web 应用程序中不起作用,因为它在 Java 7 中使用默认区域设置 - Locale.getDefault(Locale.Category.FORMAT)(如果您愿意)。

所以你真正想要的是编写一个类似于此的辅助方法(抱歉,没有奖励)(内存不足,抱歉):

public static String format(String pattern, Locale locale, Object... args) {
final String emptyPattern = "";
final FieldPosition zero = new FieldPosition(0);
MessageFormat fmt = new MessageFormat(emptyPattern, locale);
StringBuffer buf = new StringBuffer(); // I just love it...

fmt.applyPattern(pattern);
fmt.format(args, buf, zero);

return buf.toString();
}

出于性能原因,您可能会考虑创建 StringBuffer 一次,然后一直清理它,但我将优化留给您自己。
您还需要稍微修改一下模式,我稍后会解释原因:

String pattern = "{1}{0,number,\u00A4#}";

您需要传递金额和货币符号,并留给翻译人员在哪里放置符号以及如何格式化区域设置的值(不要忘记向属性文件添加注释!)。

关于java - 如何在 ICU4J 中的 MessageFormat 中自定义货币格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10142892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com