使用BigDecimal进行舍入?

时间:2016-04-06 16:35:53

标签: java encryption rsa rounding bigdecimal

我一直试图在java中使用bigdecimal进行舍入,并且遇到了一个显示非终止十进制扩展的java.lang.ArithmeticException错误。

任何人都可以解释错误的起源,因为我对java很新吗?并帮我处理我的代码?

由于

protected BigDecimal p;
protected BigDecimal q;
protected BigDecimal d;
protected BigDecimal det;
protected BigDecimal exp;
protected int e;

    this.p = pq.getP();
    this.q = pq.getQ();

    det = ((p.subtract(BigDecimal.ONE)).multiply(q.subtract(BigDecimal.ONE)));
    exp = new BigDecimal(String.valueOf(e));

    d = (det.divide(exp).setScale(2,BigDecimal.ROUND_HALF_UP));

变量" d"是我认为错误发生的地方。

1 个答案:

答案 0 :(得分:1)

您需要在进行除法时设置比例。

d = det.divide(exp, 2, BigDecimal.ROUND_HALF_UP);

注意:使用double进行舍入可能更清晰,更不容易出错。

exp = new BigDecimal(e); // does the same thing if e is an int