【发布时间】:2012-10-20 06:50:05
【问题描述】:
这只是出于好奇。如果我将两个递归数或无理数存储在两个双精度数中,然后执行一些操作,它如何产生实际结果?
例如,
double d1=7d/3;
double d2=5d/3;
double sum=d1+d2;
System.out.println(new BigDecimal(sum)); //prints exactly 4
另一个:
double d1=log10(3);
double value=Math.pow(10,d1);
System.out.println(new BigDecimal(value)); //prints exactly 3
这些准确的结果是如何产生的?
【问题讨论】:
-
@MitchWheat 我刚刚检查过,但不是这种情况。
-
不,只是 System.out.print(sum);
-
你能提供你如何打印的代码吗?
-
@VictorMukherjee
println在某些情况下确实会打印一个四舍五入的双精度数,但在这种情况下不会。我在您的示例中添加了一条打印确切结果的行。 -
@assylias:我仍然使用新的 BigDecimal(value) 得到 sum=4 和 value=3