使用无理数返回1/22140简化?

xzv2uavs  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(299)

这不可能吗?分数应该简化以避免“非终止小数展开”公共类方法吗{

BigDecimal a = new BigDecimal("1");
BigDecimal b = new BigDecimal ("22140");
BigDecimal c;

void cal () {

    System.out.println(c=a.divide(b));

}
kb5ga3dv

kb5ga3dv1#

我想你是在问是否有可能把1/22140精确地表示为 BigDecimal . 答案是否定的 BigDecimal 类不能用非终止的十进制展开来表示值,并且不允许对等式进行简化。
问:为什么?
a:基本上是数学。1/22140不能表示为m*10s,其中m和s是有限整数。
有两种可行的替代方法:
你可以使用 MathContext 参数指定如何对数字进行舍入以及保持多少精度;例如

c = a.divide(b, new MathContext(100, RoundingMode.HALF_UP));

这将计算精度为100位小数的结果,四舍五入(以传统方式)到最接近的可表示值。
请注意,这种方法会给出不精确的结果;e、 g.(1/3)*3不完全是1,无论您在 MathContext .
您可以找到并使用第三方 Rational 或者 Fraction 上课,或者自己写。
注意,javase没有提供这样的类。

相关问题