【发布时间】:2011-05-16 17:56:55
【问题描述】:
我想看看是否有人可以解释为什么下面的代码适用于 valueOf 而不是其他的。
import java.math.BigDecimal;
public class Change {
public static void main(String args[]) {
double a = 4.00d;
double b = 3.10d;
BigDecimal a1 = new BigDecimal(a);
BigDecimal b1 = new BigDecimal(b);
BigDecimal diff = a1.subtract(b1);
System.out.println("Double difference");
System.out.println(diff);
float c = 4.00f;
float d = 3.10f;
BigDecimal a2 = new BigDecimal(c);
BigDecimal b2 = new BigDecimal(d);
BigDecimal diff2 = a2.subtract(b2);
System.out.println("Float difference");
System.out.println(diff2);
System.out.println("Valueof Difference");
System.out.println(BigDecimal.valueOf(4.00).subtract(BigDecimal.valueOf(3.10)));
}
}
输出如下:
>java Change
Double difference
0.899999999999999911182158029987476766109466552734375
Float difference
0.900000095367431640625
Valueof Difference
0.9
我的问题是: valueOf() 做什么来获得精度? 有没有其他方法可以在不手动四舍五入到 2 位的情况下获得正确的结果?
谢谢,
【问题讨论】:
-
如果您想玩弄精度,可以考虑将 MathContext 参数添加到 BigDecimal 构造函数。
标签: java double bigdecimal