java - 将 String 转换为 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(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()):

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

关于java - 将 String 转换为 BigDecimal,始终保留两位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51960718/

相关文章:

java - BigDecimal - 如何在 Java 中进行此计算

java - 为什么 BigDecimal 自然排序与 equals 不一致?

java - 如何在 Java 中处理 BigDecimal 中的舍入

java - 如何使用分页和排序存储库进行多个参数搜索?

Java 泛型方法基础知识(反射)

java - 线程中的异常 "main"java.lang.NoSuchMethodError : com. ibatis.common.beans.ClassInfo.setCacheEnabled(Z)V

java - 如何使用 Java-8 Streams 将 n 维数组映射到另一种类型?

java - JTextField特定格式检查

java - 如何使用我的 Apple 开发者 ID 签署 .jar 文件

java - 使用 STaX 将一个 xml 转换为另一个 xml 需要花费大量时间