public BigNumber Min(BigNumber right)
 {
     return(BigInteger.Min(this._integer, right._integer));
 }
 public BigNumber GreatestCommonDivisor(BigNumber right)
 {
     return(BigInteger.GreatestCommonDivisor(this, right));
 }
 public static BigDecimal Cast(decimal value, BigNumber precision)
 {
     return(new BigDecimal(value, precision));
 }
 public BigDecimal NewPrecision(BigNumber precision)
 {
     return(new BigDecimal(this.ToString(), precision));
 }
        public BigDecimal Fixed(BigNumber precision)
        {
            var left = this;

            var netLeft_Right        = left._integerRight;
            var netLeft_Right_String = netLeft_Right.ToString();

            if (netLeft_Right_String.Length < left.PrecisionLength)
            {
                netLeft_Right_String = "".PadLeft((int)(left.PrecisionLength - netLeft_Right_String.Length), '0') + netLeft_Right_String;
            }

            var intPrecision = (int)precision;

            if (intPrecision >= netLeft_Right_String.Length)
            {
                return(left);
            }

            var plus = false;

            switch (netLeft_Right_String[intPrecision])
            {
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                plus = true;
                break;

            default:
                break;
            }

            var netLeft = (left._integerLeft * left.PrecisionOnlyNormal) + left._integerRight;

            if (plus)
            {
                netLeft += BigNumber.Ten.Pow(left.PrecisionLength - precision);
            }

            if (left._isNeg == true)
            {
                netLeft *= -1;
            }

            var net       = netLeft;
            var net_isNeg = net < 0;

            if (net_isNeg == true)
            {
                net *= -1;
            }

            var net_string = net.ToString();

            if (net_string.Length < left.PrecisionLength + 1)
            {
                net_string = "0" + "".PadLeft((int)(left.PrecisionLength - net_string.Length), '0') + net_string;
            }

            var resultRight = net_string.Substring((int)(net_string.Length - left.PrecisionLength));
            var resultLeft  = net_string.Substring(0, (int)(net_string.Length - resultRight.Length));

            return(new BigDecimal(
                       (net_isNeg ? "-" : "") + resultLeft + "." + resultRight
                       , precision));
        }
 public BigDecimal(decimal value, BigNumber precision) : this(value.ToString(ConvertCultureInfo), precision)
 {
 }