Java 将字符串转换为始终保留两位小数的BigDecimal

Java 将字符串转换为始终保留两位小数的BigDecimal,java,bigdecimal,Java,Bigdecimal,我想把字符串转换成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(be

我想把字符串转换成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();
    }

使用适当的区域设置可以避免更改十进制符号:

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()
):


删除
.replace(“,”)
调用,因为德语语言环境要求逗号作为十进制分隔符。如果将它们转换为点(德语中的千位分隔符),它们将被忽略,因为您可以忽略千位分隔符。并为变量
创建一个这样做的方法,这样您就不会为
BetragfruehtCheck
(原文如此)复制完全相同的代码和
betragMittagessen
。在解析的
BigDecimal
上调用
setScale(2)
,从
2,6
解析
2.60
。我得到上述程序的输出为2.6,输入为2,6。这不是你所期望的吗?@S.K.不,如果你接受上面的代码,你不会得到2.6的2,6-你得到26。
NumberFormat nf2 = NumberFormat.getNumberInstance(Locale.GERMANY);
nf2.setMinimumFractionDigits(2);
//outputs "2,60"