Sfoglia il codice sorgente

* round(x) -> trunc(x+0.5) in Julian date conversion to prevent the current
rounding mode from influencing the result

git-svn-id: trunk@15037 -

Jonas Maebe 15 anni fa
parent
commit
531efc5a69
2 ha cambiato i file con 25 aggiunte e 1 eliminazioni
  1. 1 1
      rtl/objpas/dateutil.inc
  2. 24 0
      tests/webtbs/tw16040.pp

+ 1 - 1
rtl/objpas/dateutil.inc

@@ -2047,7 +2047,7 @@ var
   a,b,c,d,e,m:integer;
   day,month,year: word;
 begin
-  a := round(AValue + 32044);
+  a := trunc(AValue + 32044.5);
   b := (4*a + 3) div 146097;
   c := a - (146097*b div 4);
   d := (4*c + 3) div 1461;

+ 24 - 0
tests/webtbs/tw16040.pp

@@ -26,4 +26,28 @@ begin
       writeln(date1:0:12);
       halt(3);
     end;
+
+
+  date1:=EncodeDateTime(2010,03,23,0,0,0,0);
+  date2:=JulianDateToDateTime(2455278.50000);
+  if date1<>date2 then
+    begin
+      writeln(date1:0:12);
+      writeln(date2:0:12);
+      halt(4);
+    end;
+  if DateTimeToJulianDate(date2)<>2455278.50000 then
+    begin
+      writeln(DateTimeToJulianDate(date2):0:5);
+      writeln(2455278.50000:0:5);
+      halt(5);
+    end;
+  jdate:=DateTimeToModifiedJulianDate(date1);
+  if ModifiedJulianDateToDateTime(jdate)<>date1 then
+    begin
+      writeln(jdate:0:12);
+      writeln(date1:0:12);
+      halt(6);
+    end;
+
 end.