java.lang.IllegalArgumentException: 模式中有多个小数点分隔符
java.lang.IllegalArgumentException: Multiple decimal separators in pattern
我想使用 Java 中的模式格式化数字。如果模式有一个以上的小数点,我会收到错误消息。这是代码:
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
DecimalFormat df = new DecimalFormat();
df.setDecimalFormatSymbols(symbols);
df.applyPattern("#.###.###.###,##");
String formattedValue = df.format("123456789");
我正在测试它,尽管使用 DecimalFormatSymbols 选择了一个,但应用模式似乎需要一个“,”作为分组分隔符。您也可以在 DecimalFormatSymbols 中自定义结果设置分组分隔符。这是我在单元测试中测试的代码
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.');
DecimalFormat df = new DecimalFormat();
df.setDecimalFormatSymbols(symbols);
df.applyPattern("#,###,###,###.##");
Assertions.assertEquals("123.456.789,25", df.format(123456789.25));
并在 df.format 参数中使用一个数字
将 DecimalFormatSymbols#setGroupingSeparator('.') 方法添加到您的代码中,例如:
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.'); // Add This.
但也使用特定于您系统当前区域设置的格式,例如:
df.applyPattern("#,###.##");
请注意,您实际上不需要像使用格式模式那样深入。上面显示的内容就足够了。数字组总是包含 3 位数字,您只需要在此处指定您想要一个分隔符
此外,使用数字值而不是数字字符串,例如:
int value = 123456789; // or 123_456_789
String formattedValue = df.format(value);
总而言之,这应该有效:
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.'); // Added this...
DecimalFormat df = new DecimalFormat();
df.setDecimalFormatSymbols(symbols);
df.applyPattern("#,###.##"); // Note the format pattern used.
int value = 123456789;**strong text** // Use a number variable.
String formattedValue = df.format(value);
System.out.println(formattedValue);
输出到控制台:
123.456.789
意大利、西班牙和挪威等一些国家/地区使用这种数字格式,考虑到这一点,您可以这样做:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(java.util.Locale.ITALIAN);
DecimalFormat df = new DecimalFormat("#,###.##", symbols);
int value = 123456789; // or 123_456_789
String formattedValue = df.format(value);
System.out.println(formattedValue);
输出到控制台:
123.456.789
注意 Locale 添加到 DecimalFormatSymbols 构造函数 (Locale.ITALIAN)。还要注意实际格式。使用系统特定区域设置的格式。另请注意,使用包含文字数字的 int 变量类型而不是数字字符串。
尝试使用 double 类型(浮点)值:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(java.util.Locale.ITALIAN);
DecimalFormat df = new DecimalFormat("#,###.##", symbols);
double value = 1234567.89d;
String formattedValue = df.format(value);
System.out.println(formattedValue);
输出到控制台:
1.234.567,89
我想使用 Java 中的模式格式化数字。如果模式有一个以上的小数点,我会收到错误消息。这是代码:
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
DecimalFormat df = new DecimalFormat();
df.setDecimalFormatSymbols(symbols);
df.applyPattern("#.###.###.###,##");
String formattedValue = df.format("123456789");
我正在测试它,尽管使用 DecimalFormatSymbols 选择了一个,但应用模式似乎需要一个“,”作为分组分隔符。您也可以在 DecimalFormatSymbols 中自定义结果设置分组分隔符。这是我在单元测试中测试的代码
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.');
DecimalFormat df = new DecimalFormat();
df.setDecimalFormatSymbols(symbols);
df.applyPattern("#,###,###,###.##");
Assertions.assertEquals("123.456.789,25", df.format(123456789.25));
并在 df.format 参数中使用一个数字
将 DecimalFormatSymbols#setGroupingSeparator('.') 方法添加到您的代码中,例如:
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.'); // Add This.
但也使用特定于您系统当前区域设置的格式,例如:
df.applyPattern("#,###.##");
请注意,您实际上不需要像使用格式模式那样深入。上面显示的内容就足够了。数字组总是包含 3 位数字,您只需要在此处指定您想要一个分隔符
此外,使用数字值而不是数字字符串,例如:
int value = 123456789; // or 123_456_789
String formattedValue = df.format(value);
总而言之,这应该有效:
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.'); // Added this...
DecimalFormat df = new DecimalFormat();
df.setDecimalFormatSymbols(symbols);
df.applyPattern("#,###.##"); // Note the format pattern used.
int value = 123456789;**strong text** // Use a number variable.
String formattedValue = df.format(value);
System.out.println(formattedValue);
输出到控制台:
123.456.789
意大利、西班牙和挪威等一些国家/地区使用这种数字格式,考虑到这一点,您可以这样做:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(java.util.Locale.ITALIAN);
DecimalFormat df = new DecimalFormat("#,###.##", symbols);
int value = 123456789; // or 123_456_789
String formattedValue = df.format(value);
System.out.println(formattedValue);
输出到控制台:
123.456.789
注意 Locale 添加到 DecimalFormatSymbols 构造函数 (Locale.ITALIAN)。还要注意实际格式。使用系统特定区域设置的格式。另请注意,使用包含文字数字的 int 变量类型而不是数字字符串。
尝试使用 double 类型(浮点)值:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(java.util.Locale.ITALIAN);
DecimalFormat df = new DecimalFormat("#,###.##", symbols);
double value = 1234567.89d;
String formattedValue = df.format(value);
System.out.println(formattedValue);
输出到控制台:
1.234.567,89