BigDecimal a = new BigDecimal(10);
BigDecimal b = new BigDecimal(7);
BigDecimal d = a.divide(b,100,java.math.RoundingMode.HALF_UP);
//BigDecimal c = a.divide(b,10,java.math.RoundingMode.UNNECESSARY);
System.out.println(d);
你看懂api了没
UNNECESSARY
public static final RoundingMode UNNECESSARY用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。如果对生成精确结果的操作指定此舍入模式,则抛出 ArithmeticException。
如果是除不尽的情况,它就是会抛出异常
你应该是要HALF_DOWN吧
保留那么多位干啥用? 有意义吗?
以下这段这代码可保留到小数点后面16个位,应该可以满足需求。
java.text.DecimalFormat df = new DecimalFormat("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
double dd = 10/7d;
System.out.println(dd);
String s = df.format(dd);
System.out.println(s);
那你就使用舍入模式取101位,然后截取前100位。
因为舍入只对最后一位有影响,因此前一百位就是原始的状态。
为什么不用RoundingMode.FLOOR舍入模式,直接取小数点后100位
[code="java"]BigDecimal d = a.divide(b,100,java.math.RoundingMode.FLOOR);[/code]