Java - 如何将字符串转换为货币格式的大十进制
Java - How to convert string to big decimal with money format
我的字符串是“1234567”,我想得到两个像这样的大十进制对象
12345,67 和 12.345,67 但我做不到。代码如下:
DecimalFormat decimalFormat = new DecimalFormat("#,##0.###");
decimalFormat.setParseBigDecimal(true);
String n = decimalFormat.format(1234567);
BigDecimal bigDecimal = (BigDecimal)decimalFormat.parse(n);
DecimalFormat decimalFormat1 = new DecimalFormat("#,0#");
decimalFormat1.setParseBigDecimal(true);
String n1 = decimalFormat.format(1234567);
BigDecimal bigDecimal1 = (BigDecimal)decimalFormat.parse(n1);
System.out.println(n);
System.out.println(bigDecimal);
System.out.println(n1);
System.out.println(bigDecimal1);
输出:
1.234.567,00
1234567.00
1.234.567,00
1234567.00
预期输出:
12.345,67
12.345,67
12345,67
12345,67
感谢您的帮助
数字格式始终是特定于区域设置的。因此需要定义的语言环境。
以下方法适用于格式化:
BigDecimal money = new BigDecimal("1234567");
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.GERMAN);
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.');
// https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
DecimalFormat format = new DecimalFormat("###,###.00");
format.setDecimalFormatSymbols(symbols);
System.out.println(format.format(money));
但是,这不符合将任何给定数字解析为 2 位小数的要求。在这里,我个人会应用除以 100,或者在给定的字符串中插入一个小数点分隔符。
BigDecimal money = new BigDecimal("1234567").divide(new BigDecimal("100"));
插入定义的小数分隔符可以像这样工作:
private static String prepare(String input) {
if (input.length() == 2) {
return ","+input;
}
if (input.length() == 1) {
return ",0"+input;
}
String integerPart = input.substring(0, input.length()-2);
String fraction = input.substring(input.length()-2);
return integerPart+","+fraction;
}
使用新的 DecimalFormat 和 prepare()
方法,默认情况下可以将字符串解析为带 2 位小数的数字。
String input = "1234567";
String prepared = prepare(input);
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.GERMAN);
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.');
DecimalFormat format = new DecimalFormat("###,###.00");
format.setDecimalFormatSymbols(symbols);
format.setParseBigDecimal(true);
BigDecimal bigDecimal = (BigDecimal)format.parse(prepared);
String n = format.format(bigDecimal);
System.out.println(n);
我的字符串是“1234567”,我想得到两个像这样的大十进制对象 12345,67 和 12.345,67 但我做不到。代码如下:
DecimalFormat decimalFormat = new DecimalFormat("#,##0.###");
decimalFormat.setParseBigDecimal(true);
String n = decimalFormat.format(1234567);
BigDecimal bigDecimal = (BigDecimal)decimalFormat.parse(n);
DecimalFormat decimalFormat1 = new DecimalFormat("#,0#");
decimalFormat1.setParseBigDecimal(true);
String n1 = decimalFormat.format(1234567);
BigDecimal bigDecimal1 = (BigDecimal)decimalFormat.parse(n1);
System.out.println(n);
System.out.println(bigDecimal);
System.out.println(n1);
System.out.println(bigDecimal1);
输出:
1.234.567,00
1234567.00
1.234.567,00
1234567.00
预期输出:
12.345,67
12.345,67
12345,67
12345,67
感谢您的帮助
数字格式始终是特定于区域设置的。因此需要定义的语言环境。 以下方法适用于格式化:
BigDecimal money = new BigDecimal("1234567");
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.GERMAN);
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.');
// https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
DecimalFormat format = new DecimalFormat("###,###.00");
format.setDecimalFormatSymbols(symbols);
System.out.println(format.format(money));
但是,这不符合将任何给定数字解析为 2 位小数的要求。在这里,我个人会应用除以 100,或者在给定的字符串中插入一个小数点分隔符。
BigDecimal money = new BigDecimal("1234567").divide(new BigDecimal("100"));
插入定义的小数分隔符可以像这样工作:
private static String prepare(String input) {
if (input.length() == 2) {
return ","+input;
}
if (input.length() == 1) {
return ",0"+input;
}
String integerPart = input.substring(0, input.length()-2);
String fraction = input.substring(input.length()-2);
return integerPart+","+fraction;
}
使用新的 DecimalFormat 和 prepare()
方法,默认情况下可以将字符串解析为带 2 位小数的数字。
String input = "1234567";
String prepared = prepare(input);
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.GERMAN);
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('.');
DecimalFormat format = new DecimalFormat("###,###.00");
format.setDecimalFormatSymbols(symbols);
format.setParseBigDecimal(true);
BigDecimal bigDecimal = (BigDecimal)format.parse(prepared);
String n = format.format(bigDecimal);
System.out.println(n);