gpt4 book ai didi

Java NumberFormat 不将逗号作为小数点分隔符

转载 作者:行者123 更新时间:2023-12-03 23:04:41 26 4
gpt4 key购买 nike

我在我的应用程序中发现了一个错误,当我使用国际格式时,我的货币字符串没有显示正确的分组和小数点分隔符。我提取了代码以尝试隔离和演示问题。在下面的代码中,我创建了一个美国格式器和一个世界格式器。它们都使用相同的货币模式,但 USA 格式化程序使用句点作为小数点分隔符,而 World 格式化程序使用逗号作为小数点分隔符。

当我要求 World 格式化程序告诉我它的分隔符是什么时,它会正确地报告它们。但是,当我让它为我的值生成字符串时,它并没有正确完成。它奇怪地使用句点作为分组和小数点分隔符。

public static void main(String[] args) throws Exception {

String currencyFormat = "¤#,##0.00;-¤#,##0.00";
NumberFormat currencyUSA = NumberFormat.getCurrencyInstance();
DecimalFormat decimalCurrencyUSA = (DecimalFormat)currencyUSA;
decimalCurrencyUSA.applyPattern(currencyFormat);

NumberFormat currencyWorld = NumberFormat.getCurrencyInstance();
DecimalFormat decimalCurrencyWorld = (DecimalFormat)currencyWorld;
decimalCurrencyWorld.applyPattern(currencyFormat);

DecimalFormatSymbols decimalFormatSymbols = decimalCurrencyWorld.getDecimalFormatSymbols();
//DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(Locale.GERMAN);

System.out.println(String.format("Original grouping: %c decimal: %c", decimalFormatSymbols.getGroupingSeparator(), decimalFormatSymbols.getDecimalSeparator()));
decimalFormatSymbols.setDecimalSeparator(',');
decimalFormatSymbols.setGroupingSeparator('.');
decimalCurrencyWorld.setDecimalFormatSymbols(decimalFormatSymbols);
System.out.println(String.format(" After grouping: %c decimal: %c", decimalFormatSymbols.getGroupingSeparator(), decimalFormatSymbols.getDecimalSeparator()));

String moneyUSA = currencyUSA.format(1500.75);
String moneyWorld = currencyWorld.format(1500.75);

DecimalFormatSymbols decimalFormatSymbols2 = decimalCurrencyWorld.getDecimalFormatSymbols();
System.out.println(String.format(" Real grouping: %c decimal: %c", decimalFormatSymbols2.getGroupingSeparator(), decimalFormatSymbols2.getDecimalSeparator()));

System.out.println(String.format(" USA String: %s", moneyUSA));
System.out.println(String.format("World String: %s", moneyWorld));

Number numberUSA = currencyUSA.parse(moneyUSA);
Number numberWorld = currencyWorld.parse(moneyWorld);

System.out.println(String.format(" USA Number: %f", numberUSA));
System.out.println(String.format("World Number: %f", numberWorld));

}

当我运行上面的代码时(在我的 Mac OS X 10.9、Eclipse Indigo、Java 1.6 上),输出是:

Original grouping: , decimal: .
After grouping: . decimal: ,
Real grouping: . decimal: ,
USA String: $1,500.75
World String: $1.500.75
USA Number: 1500.750000
World Number: 1.500000

世界货币值应为 $1.500,75,但它在两个地方都使用了句点。

编辑:

我需要专门控制分隔符。当涉及到货币符号时,我可以尊重用户的区域设置,但由于此应用程序的要求,我需要为用户提供交换分隔符时的句点/逗号的能力。我不能仅仅依靠 Locale 来控制这些东西。

问题是我显然在我的格式化程序中设置了这些值,但它们没有得到尊重。

编辑 2:我添加了代码,然后解析先前生成的货币字符串,以查看小数分隔符是否在解析时得到遵守,但在格式化时不受遵守。似乎在解析期间,句点仍被视为小数点分隔符,因为世界编号结果为 1.5 而不是 1500.75。

最佳答案

来自 Customizing Formats

¤ currency sign; replaced by currency symbol; if doubled, replaced by international currency symbol; if present in a pattern, the monetary decimal separator is used instead of the decimal separator

所以:

decimalFormatSymbols.setMonetaryDecimalSeparator(',');

会做的。

关于Java NumberFormat 不将逗号作为小数点分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21821057/

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