具有十进制值的BigDecimal?

时间:2015-03-12 19:57:45

标签: java bigdecimal

我正在尝试使用BigDecimal划分一个值,当这个值是这个值的一个Decimates BigDecimal并且我不会这样做。我需要显示decimates值。例如,如果我划分10 / 3 = 3.33333,我需要显示3.33,但会显示3.00

我怎么能这样做?

//Result-> 10 / 2 = 3,3333333

BigDecimal result = new BigDecimal(0);
BigDecimal v1 = new BigDecimal(10);
BigDecimal v2 = new BigDecimal(3);
result = v1.divide(v2, BigDecimal.ROUND_UP);

//output = 3
//I need output = 3.33

3 个答案:

答案 0 :(得分:2)

使用BigDecimal s初始化的int比例0,这意味着舍入操作将舍入为1。在您的示例中,分部将向上舍入为4

将第一个BigDecimal的比例设置为2,通过分区保留。同时将舍入模式设置为" down"。

BigDecimal v1 = new BigDecimal(10).setScale(2);
BigDecimal v2 = new BigDecimal(3);
result = v1.divide(v2, BigDecimal.ROUND_DOWN);

现在打印results会产生3.33的输出。

您也可以使用RoundingMode枚举作为舍入常量的替代品。此外,您可以使用ROUND_HALF_DOWNROUND_HALF_UPROUND_HALF_EVEN(或等效的RoundingMode)。

您可以使用具有适当小数位数的字符串来隐式设置比例。

BigDecimal v1 = new BigDecimal("10.00");  // scale of 2

答案 1 :(得分:1)

尝试 compile run这个java类,它可以按你的意愿工作

import java.math.*;
class decimal {
    public static void main(String[] args) {
BigDecimal result = new BigDecimal(0);
BigDecimal v1 = new BigDecimal(10);
BigDecimal v2 = new BigDecimal(3);
result = v1.divide(v2,2,BigDecimal.ROUND_HALF_UP);
System.out.println(result);
}
}

输出:3.33

你想要两位小数,这就是我设置scale=2

的原因

答案 2 :(得分:1)

尝试将比例尺添加到BigDecimal,如下所示:

public class User {

    public static void main(String[] args) {

        BigDecimal result = new BigDecimal(0);
        BigDecimal v1 = new BigDecimal(10).setScale(2);
        BigDecimal v2 = new BigDecimal(3);
        result = v1.divide(v2, BigDecimal.ROUND_DOWN);

        System.out.println(result);

    }
}