比double更精确的数值数据类型?

Bjø*_*olt 12 java types

Java中是否存在比a更精确地存储十进制数的数据类型double

Pab*_*ruz 22

是的,使用java.math.BigDecimal类.它可以非常精确地表示数字.

如果您只需要大整数,则可以使用java.math.BigInteger.

它们都扩展了java.math.Number.

如果您需要,您甚至可以使用现有的双打:

double d = 67.67;
BigDecimal bd = new BigDecimal(d);
Run Code Online (Sandbox Code Playgroud)

您可以使用JDBC从数据库中获取BigDecimal值:

ResultSet rs = st.executeQuery();
while(rs.next()) {
    BigDecimal bd = rs.getBigDecimal("column_with_number");
}
Run Code Online (Sandbox Code Playgroud)

遗憾的是,由于Java不支持运算符重载,因此不能像在C#和decimal类型中那样使用常规符号进行常见的数学运算.

您需要编写如下代码:

BigDecimal d1 = new BigDecimal(67.67);
BigDecimal d2 = new BigDecimal(67.68);
BidDecimal d3 = d1.add(d2); // d1 + d2 is invalid
Run Code Online (Sandbox Code Playgroud)