@@ -69,7 +69,7 @@ CArray_Ceil(CArray *a, MemoryPointer *out)
69
69
break ;
70
70
case TYPE_INTEGER_INT :
71
71
do {
72
- * IT_IDATA (it2 ) = * IT_IDATA (it1 );
72
+ * IT_IDATA (it2 ) = ( int ) ceil (( double ) * IT_IDATA (it1 ) );
73
73
CArrayIterator_NEXT (it1 );
74
74
CArrayIterator_NEXT (it2 );
75
75
} while (CArrayIterator_NOTDONE (it1 ));
@@ -119,13 +119,18 @@ CArray_Round(CArray *a, int decimals, MemoryPointer *out)
119
119
case TYPE_DOUBLE_INT :
120
120
if (negative_decimals ) {
121
121
do {
122
- * IT_DDATA (it2 ) = round (* IT_DDATA (it1 ) / multiplier ) * multiplier ;
122
+ * IT_DDATA (it2 ) = ceil (* IT_DDATA (it1 ) / multiplier ) * multiplier ;
123
123
CArrayIterator_NEXT (it1 );
124
124
CArrayIterator_NEXT (it2 );
125
125
} while (CArrayIterator_NOTDONE (it1 ));
126
126
} else {
127
127
do {
128
- * IT_DDATA (it2 ) = round (* IT_DDATA (it1 ) * multiplier ) / multiplier ;
128
+ if ((* IT_DDATA (it1 ) - (int )* IT_DDATA (it1 )) >= 0.5 ) {
129
+ * IT_DDATA (it2 ) = ceil (pow (10 ,decimals )* * IT_DDATA (it1 ))/pow (10 ,decimals );
130
+ } else {
131
+ * IT_DDATA (it2 ) = floor (pow (10 ,decimals )* * IT_DDATA (it1 ))/pow (10 ,decimals );
132
+ }
133
+
129
134
CArrayIterator_NEXT (it1 );
130
135
CArrayIterator_NEXT (it2 );
131
136
} while (CArrayIterator_NOTDONE (it1 ));
@@ -134,7 +139,7 @@ CArray_Round(CArray *a, int decimals, MemoryPointer *out)
134
139
case TYPE_INTEGER_INT :
135
140
if (negative_decimals ) {
136
141
do {
137
- * IT_IDATA (it2 ) = (int )(round (((double )(* IT_IDATA (it1 ))/multiplier )) * multiplier );
142
+ * IT_IDATA (it2 ) = (int )(ceil (((double )(* IT_IDATA (it1 ))/multiplier )) * multiplier );
138
143
CArrayIterator_NEXT (it1 );
139
144
CArrayIterator_NEXT (it2 );
140
145
} while (CArrayIterator_NOTDONE (it1 ));
0 commit comments