如何解决java.lang.IllegalArgumentException:模式中有多个小数分隔符
我想使用 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。