用JAVA实现10/7保留到小数点后100位


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);


但是问题出来了,如果我要求不舍入。
BigDecimal c = a.divide(b,10,java.math.RoundingMode.UNNECESSARY);
这样写会报错。那要怎么写?

你看懂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]