public void RoundTo(int sizeMantissa) {
if (sizeMantissa >= mantissaSize) {
// No change required
return;
}
if (sizeMantissa >= 0) {
bool fRoundUp = mantissa[sizeMantissa] >= 5;
mantissaSize = sizeMantissa;
// Round up if necessary and trim trailing zeros
for (int idx = mantissaSize - 1; idx >= 0; idx--) {
if (fRoundUp) {
if (++(mantissa[idx]) <= 9) {
// Trailing digit is non-zero, so break
fRoundUp = false;
break;
}
} else if (mantissa[idx] > 0) {
// Trailing digit is non-zero, so break
break;
}
// Trim trailing zeros
mantissaSize--;
}
if (fRoundUp) {
// Number consisted only of 9's
Debug.Assert(0 == mantissaSize);
mantissa[0] = 1;
mantissaSize = 1;
exponent++;
}
} else {
// Number was rounded past any significant digits (e.g. 0.001 rounded to 1 fractional place), so round to 0.0
mantissaSize = 0;
}
if (0 == mantissaSize) {
// 0.0
sign = 1;
exponent = 0;
}
}
#endif