summaryrefslogtreecommitdiff
path: root/external/jfreereport/patches/libformula-seconds_rounding.patch.1
blob: 369332d1a8f0b759f926bdd8f747a3780d76dd83 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
diff -ur jfreereport_libformula.org/source/org/pentaho/reporting/libraries/formula/function/datetime/SecondFunction.java jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/function/datetime/SecondFunction.java
--- jfreereport_libformula.org/source/org/pentaho/reporting/libraries/formula/function/datetime/SecondFunction.java	2016-03-05 09:43:06.121774691 +0100
+++ jfreereport_libformula/source/org/pentaho/reporting/libraries/formula/function/datetime/SecondFunction.java	2016-03-05 09:51:04.810488511 +0100
@@ -29,7 +29,7 @@
 import org.pentaho.reporting.libraries.formula.util.NumberUtil;
 
 /**
- * This function extracts the minute (0 through 59) from a time.
+ * This function extracts the seconds (0 through 59) from a time.
  *
  * @author Cedric Pronzato
  */
@@ -67,14 +67,15 @@
 
     // time * 24 so that we get the full hours (which we remove later)
     final BigDecimal bd = NumberUtil.getAsBigDecimal(n);
-    final BigDecimal hours = bd.multiply(MINUTES_PER_DAY);
-    final BigDecimal dayAndHoursAsInt = NumberUtil.performIntRounding(hours);
-    final BigDecimal minutesFraction = hours.subtract(dayAndHoursAsInt);
-
-    // Multiply the minutes with 60 to get the minutes as ints
-    final BigDecimal seconds = minutesFraction.multiply(SECONDS);
-    final BigDecimal secondsAsInt = NumberUtil.performIntRounding(seconds);
+    final BigDecimal minutes = bd.multiply(MINUTES_PER_DAY);
+    final BigDecimal dayHoursAndMinutesAsInt = NumberUtil.performIntRounding(minutes);
+    final BigDecimal secondsFraction = minutes.subtract(dayHoursAndMinutesAsInt);
+
+    // Multiply the minutes with 60 to get the seconds as ints
+    final BigDecimal seconds = secondsFraction.multiply(SECONDS);
+    final BigDecimal nanoSeconds = seconds.setScale(9, BigDecimal.ROUND_HALF_UP);
+    final BigDecimal secondsAsInt = NumberUtil.performIntRounding(nanoSeconds);
 
     return new TypeValuePair(NumberType.GENERIC_NUMBER, secondsAsInt);
   }
-}
\ No newline at end of file
+}