Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数字格式的十进制分隔符_Java_Locale_Number Formatting - Fatal编程技术网

Java 数字格式的十进制分隔符

Java 数字格式的十进制分隔符,java,locale,number-formatting,Java,Locale,Number Formatting,给定区域设置java.text.NumberFormat: NumberFormat numberFormat = NumberFormat.getInstance(); 如何在该数字格式中获取用作小数分隔符(如果是逗号或点)的字符?如何在不使用新的DecimalFormat(格式)的情况下修改此属性 谢谢助手类正是您需要的: DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(); DecimalFormatSym

给定区域设置java.text.NumberFormat:

NumberFormat numberFormat = NumberFormat.getInstance();
如何在该数字格式中获取用作小数分隔符(如果是逗号或点)的字符?如何在不使用新的DecimalFormat(格式)的情况下修改此属性

谢谢

助手类正是您需要的:

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
。无论如何,因为它可能对作者有所帮助,我将把它放在这里。

如果您的实例是,那么您可以使用来获取该信息

一般来说,你无法获得这些信息

为什么需要它?

我同意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而不是DecimalFormat。您可以为区域设置默认的DecimalFormatSymbols。这是一个潜在的危险想法,因为有些区域设置使用点作为组分隔符,逗号作为小数分隔符(例如“123.456,78”),切换它们可能会造成相当大的混乱。@Javi:如果这是您想要做的,那么您为什么不首先为用户区域设置请求正确的
NumberFormat
?在一个语言环境中混用
NumberFormat
来调整它的一些参数以适应另一个语言环境听起来像是一个可怕的灾难!对于记录,Numberformat是一个抽象类,因此您可能实际上有一个DecimalFormat对象。@locster:a
DecimalFormat
或a
ChoiceFormat
或未记录的JDK private
Numberformat
实现,或者……对于记录,此行DecimalFormat format=DecimalFormat.getInstance();不编译,因为getInstance()方法返回NumberFormat对象
new DecimalFormat().getDecimalFormatSymbols().getDecimalSeparator()
或take完全删除依赖项:
new DecimalFormatSymbols(Locale.getDefault(Locale.Category.FORMAT)).getDecimalSeparator()