在计算机编程中,十进制的精度计算是一项重要的技能,但是基于浮点数据类型的计算无法完成大量货币、税收、利率或电信领域中的精确计算。这时Java编程语言中的BigInteger和BigDecimal就有着重要的作用。
其中,BigDecimal类经常被用来表示货币和其他需要精确计算的数值类型。BigDecimal的精度非常高,在Java中使用时,需要使用BigDecimal的构造函数创建BigDecimal对象,但关键在于其精度和数值实质,其余实际上就是普通的算术和逻辑操作。
例如,代码new BigDecimal(1.4)
将会得到一个近似值为1.4000000000000003552713678800500929355621337890625的BigDecimal实例,因为它将double值预先转换为二进制以便存储。如果您需要精度的确切值,请尝试使用BigDecimal.valueOf(1.4)
来创建一个实例。
值得注意的是,BigDecimal虽然可以正确表示大量货币和其他金额数值,但是使用它进行浮点数减法可能会导致难以预料的结果。例如,执行BigDecimal.valueOf(1.1).subtract(BigDecimal.valueOf(0.1))
将会得到一个看起来不正确的0.999999999999999944488848768742172978818416595458984375结果,因此小数部分的减法更好地采用BigDecimal.valueOf(1.1).subtract(BigDecimal.valueOf(0.1), MathContext.DECIMAL128)
这种方法来进行。