From 95ab9af75c880b7fd6721217e61aed23c5069c07 Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Wed, 18 Mar 2015 15:07:24 +0000
Subject: [PATCH] cdiDecodeTimevalue: fix rounding error for negativ timevalue

---
 src/taxis.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/taxis.c b/src/taxis.c
index a218664fe..f1ac7ed32 100644
--- a/src/taxis.c
+++ b/src/taxis.c
@@ -941,7 +941,8 @@ void cdiDecodeTimevalue(int timeunit, double timevalue, int *days, int *secs)
   if ( timeunit == TUNIT_SECOND )
     {
       *days = (int) (timevalue/86400);
-      *secs = (int) (timevalue - *days*86400. + 0.5);
+      double seconds = timevalue - *days*86400.;
+      *secs = lround(seconds);
       if ( *secs < 0 ) { *days -= 1; *secs += 86400; };
       /*
       {
@@ -954,7 +955,8 @@ void cdiDecodeTimevalue(int timeunit, double timevalue, int *days, int *secs)
   else if ( timeunit == TUNIT_DAY )
     {
       *days = (int) timevalue;
-      *secs = (int) ((timevalue - *days)*86400 + 0.5);
+      double seconds = (timevalue - *days)*86400;
+      *secs = lround(seconds);
       if ( *secs < 0 ) { *days -= 1; *secs += 86400; };
       /*
       {
-- 
GitLab