gpt4 book ai didi

java - 具有另一种数字格式的货币符号

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:33 24 4
gpt4 key购买 nike

我想知道是否有一种优雅的方法可以以一种方式设置数字的货币格式,但以另一种方式保留实际的数字格式。它是 java 。本质上我是这样做的

NumberFormat format = NumberFormat.getCurrencyInstance(locale);  

这基本上没问题,除非我正在为英国用户编写一个系统,而我的用户很不高兴,因为在显示(例如)欧元时,数字的格式是欧洲人会使用的格式。所以 500,000 欧元,就像英国人会写的那样,它显示为 500.000 欧元(即交换 ,换 .)。我打算将 locale 换成 locale.UK,但我会得到错误的货币符号!

我对此有一些肮脏的修复,但我想知道是否有一种优雅的方法可以使语言环境的货币符号与本地语言环境 (locale.UK) 数字格式保持一致。

最佳答案

不同的货币也可以在字符串之前或之后放置货币符号,或者具有不同的小数位数(如果有的话)。从你的问题中并不清楚你想如何处理这些情况,但假设你想保留这些差异,试试这个。

您可以从外国格式开始,将小数格式符号替换为您的本地版本,而不是仅仅将货币符号换成本地数字格式。这些还包括货币,因此您必须将其换回(别担心,这是一个副本)。

public static NumberFormat localStyleForeignFormat(Locale locale) {
NumberFormat format = NumberFormat.getCurrencyInstance(locale);
if (format instanceof DecimalFormat) {
DecimalFormat df = (DecimalFormat) format;
// use local/default decimal symbols with original currency symbol
DecimalFormatSymbols dfs = new DecimalFormat().getDecimalFormatSymbols();
dfs.setCurrency(df.getCurrency());
df.setDecimalFormatSymbols(dfs);
}
return format;
}

这样,您还可以保留货币符号的正确定位和小数位数。一些示例,用于默认语言环境 Locale.UK

en_GB   £500,000.00     £500,000.00
fr_FR 500 000,00 € 500,000.00 €
it_IT € 500.000,00 € 500,000.00
ja_JP ¥500,000 JPY500,000
hi_IN रू ५००,०००.०० INR 500,000.00

如果您还想保留外币符号,而不是本地货币符号,请使用

localDfs.setCurrencySymbol(df.getCurrency().getSymbol(locale));

关于java - 具有另一种数字格式的货币符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29215163/

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