//double 是 浮点型数据,其实它并不是保存精确的值,而只是一个近似值,所以才叫做双精度浮点型,不过是精度更高,但不是100%,所以它的有偏差是毫无疑问的,不过值很小而已。。 double d = 0.0; for (int i=0 ; i < 40; i++) { d += 2.2; Console.WriteLine("Result = {0}",d); } Result = 2.2 Result = 4.4 Result = 6.6 Result = 8.8 Result = 11 Result = 13.2 Result = 15.4 Result = 17.6 Result = 19.8 Result = 22 Result = 24.2 Result = 26.4 Result = 28.6 Result = 30.8 Result = 33 Result = 35.2 Result = 37.4 Result = 39.6 Result = 41.8 Result = 44 Result = 46.2 Result = 48.4 Result = 50.6 Result = 52.8 Result = 55 Result = 57.2 Result = 59.4 Result = 61.6 Result = 63.8 Result = 66 Result = 68.2 Result = 70.4 Result = 72.6 Result = 74.8 Result = 77 Result = 79.2 Result = 81.4 Result = 83.6000000000001 Result = 85.8000000000001 Result = 88.0000000000001
对比一下float的精度 float f = 0.0f; for (int i=0 ; i < 40; i++) { f += 2.2f; Console.WriteLine("Result = {0}",f); }Result = 2.2 Result = 4.4 Result = 6.6 Result = 8.8 Result = 11 Result = 13.2 Result = 15.4 Result = 17.6 Result = 19.8 Result = 22 Result = 24.2 Result = 26.4 Result = 28.6 Result = 30.8 Result = 33 Result = 35.2 Result = 37.40001 Result = 39.60001 Result = 41.80001 Result = 44.00001 Result = 46.20001 Result = 48.40001 Result = 50.60001 Result = 52.80001 Result = 55.00001 Result = 57.20001 Result = 59.40001 Result = 61.60001 Result = 63.80001 Result = 66.00002 Result = 68.20001 Result = 70.40001 Result = 72.60001 Result = 74.8 Result = 77 Result = 79.2 Result = 81.39999 Result = 83.59999 Result = 85.79999 Result = 87.99998
我试了一下,结果是 246 呀 ! double mResidualSum = 282.9;
string st="36.9"; double m=mResidualSum-double.Parse(st);
textBox1.Text=m.ToString(); //返回显示246
是不是从数据库取出的 double.Parse(dv[i]["OutSum"].ToString() 的值不是 36.9 ??
static bool equal(const double & l, const double & r)
{
static double precision = 0.000000001;
return (l - r < precision);
}
};
而C#则封装以后提供了
Double.Equals(d1,d2);
所以在使用中要注意取位
//另外我觉得这里用Convert好一些,只转化一次,(个人观点)
mResidualSum = mResidualSum - Convert.ToDouble(dv[i]["OutSum"]);mResidualSum = System.Math.Round(mResidualSum,4);
直接在命令窗口输入? 282.9 -36.9
结果不是246!
double.parse(d.ToString())==d->false
Console.WriteLine(double.Parse(d.ToString())==d);
在1.1版本测出来的结果是true,所以不要误导别人。
double d = 0.0;
for (int i=0 ; i < 40; i++)
{
d += 2.2;
Console.WriteLine("Result = {0}",d);
}
Result = 2.2
Result = 4.4
Result = 6.6
Result = 8.8
Result = 11
Result = 13.2
Result = 15.4
Result = 17.6
Result = 19.8
Result = 22
Result = 24.2
Result = 26.4
Result = 28.6
Result = 30.8
Result = 33
Result = 35.2
Result = 37.4
Result = 39.6
Result = 41.8
Result = 44
Result = 46.2
Result = 48.4
Result = 50.6
Result = 52.8
Result = 55
Result = 57.2
Result = 59.4
Result = 61.6
Result = 63.8
Result = 66
Result = 68.2
Result = 70.4
Result = 72.6
Result = 74.8
Result = 77
Result = 79.2
Result = 81.4
Result = 83.6000000000001
Result = 85.8000000000001
Result = 88.0000000000001
for (int i=0 ; i < 40; i++)
{
f += 2.2f;
Console.WriteLine("Result = {0}",f);
}Result = 2.2
Result = 4.4
Result = 6.6
Result = 8.8
Result = 11
Result = 13.2
Result = 15.4
Result = 17.6
Result = 19.8
Result = 22
Result = 24.2
Result = 26.4
Result = 28.6
Result = 30.8
Result = 33
Result = 35.2
Result = 37.40001
Result = 39.60001
Result = 41.80001
Result = 44.00001
Result = 46.20001
Result = 48.40001
Result = 50.60001
Result = 52.80001
Result = 55.00001
Result = 57.20001
Result = 59.40001
Result = 61.60001
Result = 63.80001
Result = 66.00002
Result = 68.20001
Result = 70.40001
Result = 72.60001
Result = 74.8
Result = 77
Result = 79.2
Result = 81.39999
Result = 83.59999
Result = 85.79999
Result = 87.99998