2

我有一个 Decimal(19,5) 大小的数据库列,我想要一个 Java 中的 BigDecimal 来存储值但是如果我写

 BigDecimal(999999999999999.9999);

该值四舍五入为 1+E15,这是我不希望的,所以我怎样才能获得数字的完整精度。

我知道的一种方法是使用

BigDecimal("999999999999999.9999");

我认为应该有更好的选择来指定精度。

4

2 回答 2

7

您需要使用带有 a 的构造函数,String因为double常量的值在到达 的构造函数之前就已被编译器四舍五入BigDecimal。换句话说,编译器会看到您的999999999999999.9999常量,并将其转换为double. 该double类型没有足够的精度来存储所有的九,因此该值被四舍五入为1+E15,这就是传递给BigDecimal的构造函数的值。在程序开始执行它的第一条指令之前,精度就消失了。

另一方面,当你传递一个字符串时,你BigDecimal可以解释九的序列,确保你得到你需要的精确度。

于 2013-02-04T13:56:22.983 回答
2

您必须在此处使用的主要原因BigDecimal是该值不适合 double 类型。double 值在传递给 的构造函数时会被四舍五入BigDecimal,所以无论你做什么都无法恢复原始值,如果你只传递一个 double。所以你没有更好的选择——BigDecimal像你一样使用。

于 2013-02-04T13:56:48.657 回答