Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#浮点数';s显示和计算的精度不同_C#_C# 4.0_Floating Accuracy_Floating Point Precision - Fatal编程技术网

C#浮点数';s显示和计算的精度不同

C#浮点数';s显示和计算的精度不同,c#,c#-4.0,floating-accuracy,floating-point-precision,C#,C# 4.0,Floating Accuracy,Floating Point Precision,我正在Win7上用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 我知道这是显示和计算的精度

我正在Win7上用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

还有其他更好的方法吗


谢谢

尝试用字符串将输出四舍五入到小数位数:


这是因为3389774.583的平方不是11490571723552.8。 如果您尝试windows calculator,您将获得大约1149057172352.823889的值

所以对于(11490571723552.8-x*x)没有机会得到结果0,其中x是3389774.583

试一试


您可以使用
decimal
而不是
double
。它的范围较小,但精度要好得多。请查看此问题右下角“相关”栏中有关浮点精度的许多问题。
Console.WriteLine(ss.ToString("F2"));
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);