Skip to content
This repository was archived by the owner on Feb 18, 2020. It is now read-only.

Commit ac3faf2

Browse files
Fixed rounding decimal precision
1 parent 17c2cbc commit ac3faf2

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

kernel/round.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ CArray_Ceil(CArray *a, MemoryPointer *out)
6969
break;
7070
case TYPE_INTEGER_INT:
7171
do {
72-
*IT_IDATA(it2) = *IT_IDATA(it1);
72+
*IT_IDATA(it2) = (int)ceil((double)*IT_IDATA(it1));
7373
CArrayIterator_NEXT(it1);
7474
CArrayIterator_NEXT(it2);
7575
} while (CArrayIterator_NOTDONE(it1));
@@ -119,13 +119,18 @@ CArray_Round(CArray *a, int decimals, MemoryPointer *out)
119119
case TYPE_DOUBLE_INT:
120120
if (negative_decimals) {
121121
do {
122-
*IT_DDATA(it2) = round(*IT_DDATA(it1) / multiplier) * multiplier;
122+
*IT_DDATA(it2) = ceil(*IT_DDATA(it1) / multiplier) * multiplier;
123123
CArrayIterator_NEXT(it1);
124124
CArrayIterator_NEXT(it2);
125125
} while (CArrayIterator_NOTDONE(it1));
126126
} else {
127127
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+
129134
CArrayIterator_NEXT(it1);
130135
CArrayIterator_NEXT(it2);
131136
} while (CArrayIterator_NOTDONE(it1));
@@ -134,7 +139,7 @@ CArray_Round(CArray *a, int decimals, MemoryPointer *out)
134139
case TYPE_INTEGER_INT:
135140
if (negative_decimals) {
136141
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);
138143
CArrayIterator_NEXT(it1);
139144
CArrayIterator_NEXT(it2);
140145
} while (CArrayIterator_NOTDONE(it1));

0 commit comments

Comments
 (0)