【发布时间】:2011-06-10 10:25:54
【问题描述】:
给定语言环境 java.text.NumberFormat:
NumberFormat numberFormat = NumberFormat.getInstance();
如何在该数字格式中获取用作小数分隔符的字符(如果它是逗号或点)?如何在不使用新的 DecimalFormat(format) 的情况下修改此属性?
谢谢
【问题讨论】:
标签: java locale number-formatting
给定语言环境 java.text.NumberFormat:
NumberFormat numberFormat = NumberFormat.getInstance();
如何在该数字格式中获取用作小数分隔符的字符(如果它是逗号或点)?如何在不使用新的 DecimalFormat(format) 的情况下修改此属性?
谢谢
【问题讨论】:
标签: java locale number-formatting
帮助类 DecimalFomatSymbols 是您正在寻找的:
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance();
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
char sep=symbols.getDecimalSeparator();
根据需要设置符号:
//create a new instance
DecimalFormatSymbols custom=new DecimalFormatSymbols();
custom.setDecimalSeparator(',');
format.setDecimalFormatSymbols(custom);
编辑:此答案仅对DecimalFormat 有效,不适用于问题中要求的NumberFormat。反正对作者有帮助,就放在这里吧。
【讨论】:
DecimalFormat 或 ChoiceFormat 或未记录的 JDK 私有 NumberFormat 实现或 ...
new DecimalFormat().getDecimalFormatSymbols().getDecimalSeparator()
new DecimalFormatSymbols(Locale.getDefault(Locale.Category.FORMAT)).getDecimalSeparator()
我同意 biziclop 和 Joachim Sauer 的观点,即混淆小数和分组分隔符并手动完成这项工作会导致很多问题。在NumberFormat getInstance 方法中使用 locale 参数会自动为您完成所有工作。如果您愿意,您可以轻松禁用千位分组分隔符。
以下 junit 测试方法(通过)显示了基于英语和德语语言环境的这种行为。
public void testFormatter() {
DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.UK);
assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMAN);
assertEquals(',', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
//and in case you want another decimal seperator for a specific locale
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
formatter.setDecimalFormatSymbols(decimalFormatSymbols);
assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
}
【讨论】:
【讨论】:
NumberFormat 呢?在一个语言环境中使用 NumberFormat 来调整 一些 参数以适应另一个语言环境,这听起来像是一场可怕的灾难!