System.Xml.Xsl.XPathConvert.FloatingDecimal.RoundTo C# (CSharp) Method

RoundTo() public method

public RoundTo ( int sizeMantissa ) : void
sizeMantissa int
return void
            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