C#浮点数';s显示和计算的精度不同
我正在Win7上用C#进行计算 我遇到了一个双精度问题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 我知道这是显示和计算的精度
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);