DELPHI关于浮点型数据的比较
日期型进行判断的时候,有个=的比较。断点过去,放上去提示,两个变量的值都是
41049.666667,但是程序认为两个值不同。而这个数值转化为日期是 2012.05.20 16:00:00
再次跟踪时候,同样的显示,程序认为判断相同。
我个人怀疑是精度显示不够的问题,就是说,其实两次值并不一样,只是鼠标浮动提示只显示了那么多位。
详细说明:这个时间点是通过计算得来的,第一种比较不可通过的得来方式是,从0点,每次加240分钟(就是4个小时)。第二种比较通过的是从0点,每次加120分钟(就是2个小时)。或者每次加480分钟(6个小时)
只有每次加240分钟所得到的下午4点,是不可通过的。关键代码如下
ST:=41049.666667//(2012.05.20 16:00:00);//此值不变,被比较
dStart:=41049;//(2012.05.20)
之后对dStart进行累加,与ST进行比较.
分别IncMinute(dStart,240);IncMinute(dStart,480);IncMinute(dStart,120);
当第一种加到41049.666667时候,程序认为时间点不同。
请问有人遇到过类似问题吗?如何解决呢?
[解决办法]
浮点数比较不能用等,可以作如下的比较:abs(a-b)<0.000000001 ,这个可以选一个比较小的常数,具体可根据你所需精度及浮点数的类型。
[解决办法]
浮点数只能近似相等,采用SameValue吧,看看精度是否符合你的要求