比double更精确的数值数据类型?
Java中是否存在比double
精度更精确地存储十进制数的数据类型?
是的,使用java.math.BigDecimal类。 它可以非常精确地表示数字。
如果您只需要大整数,则可以使用java.math.BigInteger 。
它们都扩展了java.math.Number 。
如果需要,您甚至可以使用现有的双打:
double d = 67.67; BigDecimal bd = new BigDecimal(d);
您可以使用JDBC从数据库中获取BigDecimal值:
ResultSet rs = st.executeQuery(); while(rs.next()) { BigDecimal bd = rs.getBigDecimal("column_with_number"); }
遗憾的是,由于Java不支持运算符重载,因此不能像C#和decimal
类型那样使用常规符号进行常见的数学运算。
您需要编写如下代码:
BigDecimal d1 = new BigDecimal(67.67); BigDecimal d2 = new BigDecimal(67.68); BidDecimal d3 = d1.add(d2); // d1 + d2 is invalid
是:java.math.BigDecimal类。
使用BigDecimal它可以提供更好的精度
是的,您可以使用任意精度类,如BigDecimal 。
你可以使用BigDecimal
要使用BigDeciamls进行计算,这个类提供了一些特殊的方法来代替标准运算符,例如+ - * / ...
来自int,double等…
取决于您的输入范围。 很多时候,你可以使用int或long。 为了钱,只需存储整数个便士。 int将处理最高20,000,000.00美元,这对我的银行账户来说足够大。 长得多。
如果您的范围合适,使用long比使用BigDecimal更快更干净