예제 #1
0
        public static BigDecimal operator /(BigDecimal a, BigDecimal b)
        {
            BigDecimal outVal = 0;

            var maxPrecision = BigInteger.Max(a._scale, b._scale);

            if (a._scale < maxPrecision)
            {
                a._scale = (ushort)maxPrecision;
                a._value = a._value * BIPow(10, maxPrecision - a._scale);
            }

            if (b._scale < maxPrecision)
            {
                b._scale = (ushort)maxPrecision;
                b._value = b._value * BIPow(10, maxPrecision - b._scale);
            }

            outVal._value = BigInteger.DivRem(a._value, b._value, out var remainder);

            while (remainder != 0 && outVal._scale < MaxPrecision)
            {
                while (BigInteger.Abs(remainder) < BigInteger.Abs(b._value))
                {
                    remainder     *= 10;
                    outVal._value *= 10;
                    outVal._scale++;
                }
                outVal._value = outVal._value + BigInteger.DivRem(remainder, b._value, out remainder);
            }

            return(outVal);
        }