我必须计算一些浮点变量,我的同事建议我使用BigDecimal而不是double,因为它会更精确。但是我想知道它是什么,以及如何最大限度地利用BigDecimal
发布于 2010-08-05 17:45:13
BigDecimal是一种精确的数字表示方式。Double具有一定的精度。使用不同幅度的倍增(例如d1=1000.0和d2=0.001)可能会导致0.001在求和时一起下降,因为幅度的差异如此之大。如果使用BigDecimal,这种情况就不会发生。
BigDecimal的缺点是速度较慢,而且以这种方式编写算法会有点困难(因为+ - *和/没有过载)。
如果你和钱打交道,或者精确度是必须的,那就使用BigDecimal。否则,Doubles往往就足够好了。
我确实推荐阅读BigDecimal的javadoc,因为它们比我在这里更好地解释了事情:)
发布于 2016-05-14 03:10:19
我的英语不好,所以我在这里只写一个简单的例子。
double a = 0.02;
double b = 0.03;
double c = b - a;
System.out.println(c);
BigDecimal _a = new BigDecimal("0.02");
BigDecimal _b = new BigDecimal("0.03");
BigDecimal _c = _b.subtract(_a);
System.out.println(_c);程序输出:
0.009999999999999998
0.01还有人想用double吗?;)
发布于 2015-04-14 16:18:56
double与double有两个主要区别:
n*10^-scale,其中n是任意大有符号整数,小数位数可以认为是将小数点向左或向右移动的位数仍然不能说BigDecimal可以代表任何数字。但您应该使用BigDecimal进行货币计算的两个原因是:
double,随着值的大小增加,其精度会降低,这可能会给结果带来严重的误差。https://stackoverflow.com/questions/3413448
复制相似问题