当前位置: 代码迷 >> java >> Java-如何使用货币格式将字符串转换为大十进制
  详细解决方案

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

热度:24   发布时间:2023-07-31 10:56:44.0

我的字符串是“ 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));

但是,这不满足将任何给定数字解析为两位数为十进制的要求。 在这里,我个人将应用100除法,或者在给定的String中插入一个十进制分隔符。

    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()方法,默??认情况下可以将String解析为带有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);
  相关解决方案