执行以下操作
val num = BigDecimal(1.0)
val den = BigDecimal(3.0)
println((num/den)(MathContext.DECIMAL128))
Run Code Online (Sandbox Code Playgroud)
我只能得到
0.3333333333333333333333333333333333
Run Code Online (Sandbox Code Playgroud)
这比我想要的少128
默认上下文是MathContext.DECIMAL128,它在所有计算中使用,因此在您的示例中,num/den的结果已经舍入到128位.您需要首先在所有值上设置上下文,然后进行计算.
val mc = new MathContext(512)
val num = BigDecimal(1.0,mc)
val den = BigDecimal(3.0,mc)
println(num/den)
Run Code Online (Sandbox Code Playgroud)
除非您知道算术不会产生无界的十进制表示,否则不要尝试使用MathContext.UNLIMITED.在您尝试打印之前它会爆炸.