没什么不解的,
TDatetime其实是个Double 类型,
他的整数部分是从 1899年12月30日开始至今的天数(ms 的这个类型是从1990/1/1开始的,他们差2天)
小数部分是 1/(24*60*60) 乘以 今天过去的秒数

解决方案 »

  1.   

    没什么奇怪的,你在Button2的单击事件中加入showmessage(FloatToStr(datetimepicker1.Date)+#13+FloatToStr(datetimepicker2.Date));看看就知道是怎么回事了。
      

  2.   

    我的疑问在trunc那里,大家试了没有??? 试过再说行吗?button1 的显示结果为 1.00
    button2 的结果为     0
    而button3的结果为    1 button1的显示结果表明 date1-date2 为 1.00
    而button2 显示的结果疑点就是: 如果 trunc(1.00)的话,结果为 1,而这里却为0。 
    forgot(让一切随风) 的答案我看了,
    结果为date1:37406.9012268518
          date2:37405.9012434028但是 double 后的小数是两位 ,分别为 37406.90 和 37405.90trunc的结果为什么会不一样????
      

  3.   

    Delphi 也用实型数表示日期和时间数据。但为了更准确起见,Delphi 特别定义了TDateTime 数据类型,这是一个浮点类型,因为这个类型必须足够宽,使变量能容纳年、月、日、时、分和秒、甚至毫秒。日期值按天计数,从1899-12-30开始,放在TDateTime 类型的整数部分;时间值则位于十进制数的小数部分。TDateTime 不是编译器可直接识别的预定义类型,它在System单元定义:type
      TDateTime = type Double;
      

  4.   

    datetimepicker1.date-datetimepicker2.date=
    37406.9012268518-37405.9012434028=?=0.99
    所以。button2.click=0。
    而button3.click
    当然等于1了
      

  5.   

    那为何 button1 =(d1-d2)=1.00  ???而 button2 = trunc(d1-d2) 却等于 0???我实在拐不过来弯,大家再来点醒一下我这梦中人吧
      

  6.   

    format('%f',[i])是对i四舍五入取2位小数,例如format('%f',[0.995])=1.00
    trunc(i)是取接近0的最大整数,例如trunc(0.995)=0