2014-02-13 42 views
0

我正在用Win7上的C#进行计算。C#浮点数的显示和计算精度不同

我得到了一个双精度数的问题。

double x = 3389774.583; 

string ss = "x is " + x + " x square is " + x * x + " , 11490571723552.8 - x*x is " + (11490571723552.8 - x * x) + "\n"; 

Console.WriteLine(ss); 

你会发现结果不为0,甚至强硬11490571723552.8是X * X。

我知道这是显示和计算的精度问题。

我可以设置一个阈值,使结果0

是否有其他更好的方法?

感谢

+1

你可以用'decimal',而不是'double'。它的范围较小,但精度要好得多。 – MarcinJuraszek

+0

在这个问题的右下角的“相关”栏中查看关于浮点精度的许多问题。 –

+2

[每个计算机科学家应该知道的关于浮点算术](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

回答

0

尝试用format串四舍五入输出到一个小数位数的:

Console.WriteLine(ss.ToString("F2")); 
1

这是因为3389774.583平方米不11490571723552.8。 如果你会尝试Windows计算器,你会得到11490571723552.823889的价值。

所以没有机会得到结果为0(11490571723552.8 - X * X),其中X为3389774.583

尝试

double x = 3389774.583; 
double xx = x*x; 
Console.WriteLine(xx); 

string ss = "x is " + x + " x square is " + x * x + " , 11490571723552.8 - x*x is " + (xx - x * x) + "\n"; 
Console.WriteLine(ss);