解析 2.000,00 到 2000 和 2.000,15 到 2000.15

Parse 2.000,00 to 2000 and 2.000,15 to 2000.15

我正在努力格式化 java 中的数字。

我的输入格式如下(我无法更改):2.000,15 输出应如下所示:2000.15

如果逗号后只有 0,则输出应如下所示:2000

输入以字符串形式给出。

我已经尝试使用 DecimalFormat 但这只会导致 IllegalArgumentException

DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getInstance(Locale.ENGLISH);
decimalFormat.setMinimumFractionDigits(0);
decimalFormat.setMaximumFractionDigits(2);
decimalFormat.setGroupingUsed(false);
return decimalFormat.format(Double.parseDouble(characteristicValue));

您拥有合适的工具,但您不需要获取 DecimalFormat 的实例,您可以创建自己的实例。

import java.text.DecimalFormat;

class Playground {
    public static void main(String[ ] args) {
        String pattern = "###,###.###";
        DecimalFormat decimalFormat = new DecimalFormat(pattern);

        String format = decimalFormat.format(2000.15);
        System.out.println(format);
    }
}

试一试:

NumberFormat fmt = NumberFormat.getInstance(Locale.GERMAN);
        try {
            BigDecimal bd = new BigDecimal(fmt.parse("2.000,15").toString());
            System.out.println(bd.toString()); // output: 2000.15
        } catch (ParseException e) {
            //ex handling
        }

您可以尝试以下方法:

  1. 选择一种使用点分隔的千位分隔符的数字格式。
  2. 设置小数(分数)位的最小有效数字。

无需设置 Java 的 SDK 中已存在的格式。

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

public class FormattingNumbers {
    static NumberFormat inputFormat = NumberFormat.getNumberInstance(Locale.GERMAN);
    static NumberFormat outputFormat = NumberFormat.getNumberInstance(Locale.US);

    static {
        inputFormat.setMinimumFractionDigits(2);
        outputFormat.setMinimumFractionDigits(2);
    }

    public static void main(String[] args) throws ParseException {
        String[] numbers = { "2.000,00", "2.000,15" };

        for (String number : numbers) {
            System.out.println(outputFormat.format(inputFormat.parse(number)));
        }
    }
}

输出:

2,000.00
2,000.15

注:这里是countries using decimal comma的列表。