View | Details | Raw Unified | Return to bug 51339
Collapse All | Expand All

(-)src/java/org/apache/poi/ss/formula/functions/MathX.java (-30 / +3 lines)
Lines 53-65 Link Here
53
            retval = Double.NaN;
53
            retval = Double.NaN;
54
        }
54
        }
55
        else {
55
        else {
56
            if (p != 0) {
56
            retval = java.math.BigDecimal.valueOf(n).setScale(p, java.math.RoundingMode.HALF_UP).doubleValue();
57
                double temp = Math.pow(10, p);
58
                retval = Math.round(n*temp)/temp;
59
            }
60
            else {
61
                retval = Math.round(n);
62
            }
63
        }
57
        }
64
58
65
        return retval;
59
        return retval;
Lines 87-108 Link Here
87
            retval = Double.NaN;
81
            retval = Double.NaN;
88
        }
82
        }
89
        else {
83
        else {
90
            if (p != 0) {
84
            retval = java.math.BigDecimal.valueOf(n).setScale(p, java.math.RoundingMode.UP).doubleValue();
91
                double temp = Math.pow(10, p);
92
                double nat = Math.abs(n*temp);
93
94
                retval = sign(n) *
95
                    ((nat == (long) nat)
96
                            ? nat / temp
97
                            : Math.round(nat + 0.5) / temp);
98
            }
99
            else {
100
                double na = Math.abs(n);
101
                retval = sign(n) *
102
                    ((na == (long) na)
103
                        ? na
104
                        : (long) na + 1);
105
            }
106
        }
85
        }
107
86
108
        return retval;
87
        return retval;
Lines 130-142 Link Here
130
            retval = Double.NaN;
109
            retval = Double.NaN;
131
        }
110
        }
132
        else {
111
        else {
133
            if (p != 0) {
112
            retval = java.math.BigDecimal.valueOf(n).setScale(p, java.math.RoundingMode.DOWN).doubleValue();
134
                double temp = Math.pow(10, p);
135
                retval = sign(n) * Math.round((Math.abs(n)*temp) - 0.5)/temp;
136
            }
137
            else {
138
                retval = (long) n;
139
            }
140
        }
113
        }
141
114
142
        return retval;
115
        return retval;
(-)src/testcases/org/apache/poi/ss/formula/functions/TestMathX.java (+3 lines)
Lines 672-677 Link Here
672
        
672
        
673
        d = 150.0; p = -2;
673
        d = 150.0; p = -2;
674
        assertEquals("round ", 200, MathX.round(d, p));
674
        assertEquals("round ", 200, MathX.round(d, p));
675
676
        d = 2162.615d; p = 2;
677
        assertEquals("round ", 2162.62d, MathX.round(d, p));
675
    }
678
    }
676
679
677
    public void testRoundDown() {
680
    public void testRoundDown() {

Return to bug 51339