将String始终转换为BigDecimal并始终保留两位小数

时间:2018-08-22 06:09:34

标签: java bigdecimal

我想将String转换为BigDecimal。 如果我使用 2,6 运行以下代码,则Java始终将字符串转换为 26 ,但是我想要的是 2.60 ,或者我有一个像 14,35 这样的字符串也应转换为正确的德语格式。

    Locale in_ID = new Locale("de");

    DecimalFormat nf = (DecimalFormat) NumberFormat.getInstance(in_ID);
    nf.setParseBigDecimal(true);

    if(betragFruehtsueck.equals(""))
    {
        betragFruehtsueck = "0.00";
    }
    if(betragMittagessen.equals(""))
    {
        betragMittagessen = "0.00";
    }

    betragFruehtsueck = betragFruehtsueck.replace(",", ".");
    betragMittagessen = betragMittagessen.replace(",", ".");

    BigDecimal bd = null;
    BigDecimal bdM = null;

    try {
        bd = (BigDecimal) nf.parse(betragFruehtsueck);
        bdM = (BigDecimal) nf.parse(betragMittagessen);

    } catch (ParseException e) {
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:3)

使用正确的语言环境可以避免更改十进制符号:

DecimalFormat nf = (DecimalFormat) NumberFormat.getInstance(Locale.GERMANY);
nf.setParseBigDecimal(true);
BigDecimal bd = (BigDecimal) nf.parse("2,6");

这可确保应用2的小数位数:

bd = bd.setScale(2, RoundingMode.HALF_UP); //2.60

如果需要在相同的语言环境中将数字格式化为字符串,则应该可以进行以下操作(并且可能更适合bd.toString()):

NumberFormat nf2 = NumberFormat.getNumberInstance(Locale.GERMANY);
nf2.setMinimumFractionDigits(2);
//outputs "2,60"