Java-如何使用货币格式将字符串转换为大十进制

Java-如何使用货币格式将字符串转换为大十进制,java,number-formatting,bigdecimal,Java,Number Formatting,Bigdecimal,我的字符串是“1234567”,我想得到两个像这样的大十进制对象 12345,67和12.345,67但我不能这么做。代码如下所示: DecimalFormat decimalFormat = new DecimalFormat("#,##0.###"); decimalFormat.setParseBigDecimal(true); String n = decimalFormat.format(1234567); BigDecimal bigDecimal = (BigDecimal)dec

我的字符串是“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=新的BigDecimal(“1234567”);
DecimalFormatSymbols符号=新的DecimalFormatSymbols(Locale.derman);
符号。setDecimalSeparator(',');
符号。setGroupingSeparator('.');
// https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
DecimalFormat=新的DecimalFormat(“####,###.00”);
格式。setDecimalFormatSymbols(符号);
System.out.println(format.format(money));
但是,这不符合将任何给定数字解析为2位小数的要求。在这里,我个人会用100除法,或者在给定的字符串中插入一个十进制分隔符

BigDecimal money=new BigDecimal(“1234567”)。除法(new BigDecimal(“100”);
插入已定义的小数分隔符的工作方式如下:

私有静态字符串准备(字符串输入){
if(input.length()==2){
返回“,”+输入;
} 
if(input.length()==1){
返回“,0”+输入;
}
字符串integerPart=input.substring(0,input.length()-2);
字符串分数=input.substring(input.length()-2);
返回整数部分+“,”+分数;
}
使用新的十进制格式和
prepare()
方法,可以将字符串解析为默认为2位小数的数字

String input=“1234567”;
字符串准备=准备(输入);
DecimalFormatSymbols符号=新的DecimalFormatSymbols(Locale.derman);
符号。setDecimalSeparator(',');
符号。setGroupingSeparator('.');
DecimalFormat=新的DecimalFormat(“####,###.00”);
格式。setDecimalFormatSymbols(符号);
format.setParseBigDecimal(true);
BigDecimal=(BigDecimal)format.parse(已准备好);
字符串n=format.format(bigDecimal);
系统输出println(n);

数字格式始终是特定于语言环境的。因此,需要一个定义的区域设置。 以下方法适用于格式设置:

BigDecimal money=新的BigDecimal(“1234567”);
DecimalFormatSymbols符号=新的DecimalFormatSymbols(Locale.derman);
符号。setDecimalSeparator(',');
符号。setGroupingSeparator('.');
// https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
DecimalFormat=新的DecimalFormat(“####,###.00”);
格式。setDecimalFormatSymbols(符号);
System.out.println(format.format(money));
但是,这不符合将任何给定数字解析为2位小数的要求。在这里,我个人会用100除法,或者在给定的字符串中插入一个十进制分隔符

BigDecimal money=new BigDecimal(“1234567”)。除法(new BigDecimal(“100”);
插入已定义的小数分隔符的工作方式如下:

私有静态字符串准备(字符串输入){
if(input.length()==2){
返回“,”+输入;
} 
if(input.length()==1){
返回“,0”+输入;
}
字符串integerPart=input.substring(0,input.length()-2);
字符串分数=input.substring(input.length()-2);
返回整数部分+“,”+分数;
}
使用新的十进制格式和
prepare()
方法,可以将字符串解析为默认为2位小数的数字

String input=“1234567”;
字符串准备=准备(输入);
DecimalFormatSymbols符号=新的DecimalFormatSymbols(Locale.derman);
符号。setDecimalSeparator(',');
符号。setGroupingSeparator('.');
DecimalFormat=新的DecimalFormat(“####,###.00”);
格式。setDecimalFormatSymbols(符号);
format.setParseBigDecimal(true);
BigDecimal=(BigDecimal)format.parse(已准备好);
字符串n=format.format(bigDecimal);
系统输出println(n);

看起来您的输出和代码不匹配。确保您上传了最新的代码/结果。当我运行您的代码时,我在“new DecimalFormat(“#,0#”)“处得到了格式错误的模式”#,0#“,”该代码根本不为我运行,它在运行时抛出此异常:
java.lang.IllegalArgumentException:格式错误的模式“#,0”
看起来您的输出和代码不匹配。确保您上传了最新的代码/结果。当我运行您的代码时,我在“new DecimalFormat(“#,0#”)”中得到了格式错误的模式“#,0#”,该代码根本不会为我运行,它在运行时抛出此异常:
java.lang.IllegalArgumentException:格式错误的模式“#,0”
非常感谢。当我用System.out.println(bigDecimal)打印时,它显示12345.67,但n是12.345,67,非常感谢。当我使用System.out.println(bigDecimal)打印时,它显示12345.67,但n是12.345,67