我有一个 Decimal(19,5) 大小的数据库列,我想要一个 Java 中的 BigDecimal 来存储值但是如果我写
BigDecimal(999999999999999.9999);
该值四舍五入为 1+E15,这是我不希望的,所以我怎样才能获得数字的完整精度。
我知道的一种方法是使用
BigDecimal("999999999999999.9999");
我认为应该有更好的选择来指定精度。
我有一个 Decimal(19,5) 大小的数据库列,我想要一个 Java 中的 BigDecimal 来存储值但是如果我写
BigDecimal(999999999999999.9999);
该值四舍五入为 1+E15,这是我不希望的,所以我怎样才能获得数字的完整精度。
我知道的一种方法是使用
BigDecimal("999999999999999.9999");
我认为应该有更好的选择来指定精度。
您需要使用带有 a 的构造函数,String
因为double
常量的值在到达 的构造函数之前就已被编译器四舍五入BigDecimal
。换句话说,编译器会看到您的999999999999999.9999
常量,并将其转换为double
. 该double
类型没有足够的精度来存储所有的九,因此该值被四舍五入为1+E15
,这就是传递给BigDecimal
的构造函数的值。在程序开始执行它的第一条指令之前,精度就消失了。
另一方面,当你传递一个字符串时,你BigDecimal
可以解释九的序列,确保你得到你需要的精确度。
您必须在此处使用的主要原因BigDecimal
是该值不适合 double 类型。double 值在传递给 的构造函数时会被四舍五入BigDecimal
,所以无论你做什么都无法恢复原始值,如果你只传递一个 double。所以你没有更好的选择——BigDecimal
像你一样使用。