【问题标题】:Optimize code for rounding off of a BigDecimal number优化用于四舍五入 BigDecimal 数的代码
【发布时间】:2014-07-11 06:17:52
【问题描述】:

我有一个场景,我以字符串的形式获得一个金额,我需要将其四舍五入并作为字符串发送我所做的是:

public static String roundOff(String pfEmpWithoutRoundOff) {
        try {

            BigDecimal bigDecimal = new BigDecimal(pfEmpWithoutRoundOff);
            int value = bigDecimal.intValue();
            int length = String.valueOf(value).length();
            BigDecimal rounded = bigDecimal.round(new MathContext(length, RoundingMode.HALF_UP));
            return String.valueOf(rounded);
        }
        catch(ArithmeticException e)
        {
            e.printStackTrace();
        }
        return null;

    }

那么有什么方法可以优化代码。我有一些 5 行,我可以做一些 2-3 行。

【问题讨论】:

  • 我在想是否有人可以在这里帮助我
  • 可能是字符串格式?数量是否真的很大以使其成为 BigDecimal? String.format(Locale.US, "%.2f", rawprice);
  • @IvanIvanov 想要它在 BigDecimal 中只是想在一些大额的情况下安全

标签: java bigdecimal


【解决方案1】:

你的意思是:

return new BigDecimal(pfEmpWithoutRoundOff).setScale(0, RoundingMode.HALF_UP).toString();

?

【讨论】:

  • 如果对不同的输入字符串有不同的比例,如何使用 setScale()?
  • 我不明白你的意思。您能否提供几个示例,您希望什么输入会产生什么输出?
  • 好吧,我误解了 MathContext() 的 int setPrecision 和 setScale()。它在做这项工作 grt :)
【解决方案2】:

试试这个(如果你喜欢),它只有 2 行 用于四舍五入 String

public static String roundOff(String pfEmpWithoutRoundOff) {
    Long roundVal = Math.round(Double.valueOf(pfEmpWithoutRoundOff));
    return roundVal.toString();
}

【讨论】:

  • 我不想冒险用 long 或 double 我想要 BigDecimal
  • 然后按照 Michael 的建议使用 new BigDecimal(pfEmpWithoutRoundOff).setScale(0, RoundingMode.HALF_UP)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多