试图限制BigDecimal division Java的小数位数

时间:2016-03-31 01:59:16

标签: java

我是Java世界的新手,正在尝试学习如何使用BigDecimal。我现在要做的是限制除法问题中的小数位数。我的代码行是:

quotient=one.divide(x);

其中商,一和x都是BigDecimal类型。但是,我无法弄清楚如何限制要打印的小数位数,说x是一个大数字,一个等于1.所有的帮助表示赞赏,谢谢!

2 个答案:

答案 0 :(得分:0)

如果该部门具有非终止的十进制扩展,那么该代码将会死于可怕的死亡。请参阅divide(BigDecimal divisor)的javadoc:

  

如果无法表示确切的商(因为它具有非终止的十进制扩展),则抛出ArithmeticException

示例:

BigDecimal one = BigDecimal.ONE;
BigDecimal x = BigDecimal.valueOf(7);
one.divide(x); // throws java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

使用divide()的其他重载之一,例如divide(BigDecimal divisor, int scale, RoundingMode roundingMode)

BigDecimal one = BigDecimal.ONE;
BigDecimal x = BigDecimal.valueOf(7);
BigDecimal quotient = one.divide(x, 5, RoundingMode.HALF_UP);
System.out.println(quotient); // prints: 0.14286
BigDecimal one = BigDecimal.ONE;
BigDecimal x = BigDecimal.valueOf(7);
BigDecimal quotient = one.divide(x, 30, RoundingMode.HALF_UP);
System.out.println(quotient); // prints: 0.142857142857142857142857142857

答案 1 :(得分:0)

要设置变量BigDecimal中的小数位数,您可以使用以下句子取决于您想要实现

value = value.setScale(2, RoundingMode.CEILING)要做' cut'小数点后2位的部分

value = value.setScale(2, RoundingMode.HALF_UP)做共同回合

请参阅Rounding BigDecimal to *always* have two decimal places