2014-09-11 40 views
1

我觉得我在这里错过了一些东西,但我并不完全确定我是什么,而且我相对较新,所以我无法准确搜索可能是什么造成它。Math.pi vs double and rounding via printf in java

Java代码如下:

double testDoublePi = 3.145926 
System.out.printf("This one rounds: %.2f\tBut this does not: %.2f", testDoublePi, Math.PI); 

“这一个回合:3.15但这并不:3.14”

我预计双方将检查千位和相应的四舍五入,但这显然不是这种情况。

我有一个偷偷摸摸的怀疑,它与testDoublePi有限与Math.PI有关,但我不确定。我没有一个特殊的实际应用程序,需要PI才能被直接四舍五入,但我认为在我陷入困境之前知道发生了什么很重要。

+0

Math.PI也是有限的(也是双重的);所以抛出这个假设,然后回去。 – user2864740 2014-09-11 01:54:51

+0

得到这个数字,否则我们会把你带到一艘带有老虎的救生艇上。 – 2014-09-11 02:22:08

回答

4

会发生什么是Pi不是3.145926...。它是3.1415926...。它们是不同的:

3.145926 -> 3.15 
3.1415926 -> 3.14 
    ^
+0

a-hah!我觉得自己像一个白痴,Typo + Banker's Rounding。感谢您的回应! – Floydasaurus 2014-09-11 01:59:20

+0

没问题,欢迎来到StackOverflow! – Christian 2014-09-11 02:01:07