protected override string FormatRaw(NumberClass nc)
    {
        if (nc.exponent <= beforeSciCut)
        {
            return($"{nc.GetRealMantissa():###,##0.##}");
        }
        var expExp = Math.Floor(Math.Log10(nc.exponent));

        var ext  = nc.exponent % 3;
        var nMan = nc.mantissa * Math.Pow(10, ext);
        var nExp = nc.exponent - ext;

        if (expExp <= beforeSciCutExponent)
        {
            return($"{nMan:##0.##}{e}{nExp:###,###}");
        }

        var expMan = nExp / Math.Pow(10, expExp);

        string GetMantissaIfReasonable() => expExp <= 15 ? $"{nMan:0.00}" : "";

        var expExt  = expExp % 3;
        var nExpMan = expMan * Math.Pow(10, expExt);
        var nExpExp = expExp - expExt;

        if (cutOff1E && expMan == 1)
        {
            return($"{GetMantissaIfReasonable()}{e}{e}{nExpExp:###,###}");
        }
        return($"{GetMantissaIfReasonable()}{e}{nExpMan:##0.00}{e}{nExpExp:###,###}");
    }
Exemple #2
0
    public NumberClass Pow(NumberClass n)
    {
        if (n == One || this == One || this == Zero)
        {
            return(this);
        }
        if (n == Zero)
        {
            return(One);
        }
        if (exponent == 0 && n.exponent == 0)
        {
            return(Math.Pow(mantissa, n.mantissa));
        }

        var tempExpo = exponent + Math.Log10(mantissa);

        if (Math.Max(Math.Log10(exponent), 0) + n.exponent < 300)
        {
            tempExpo *= n.GetRealMantissa();
            return(tempExpo < 1e17
                ? new NumberClass(Math.Pow(10, tempExpo % 1), Math.Floor(tempExpo))
                : new NumberClass(mantissa, tempExpo));
        }

        tempExpo  = Math.Log10(tempExpo);
        tempExpo += n.exponent + Math.Log10(n.exponent);
        return(new NumberClass(mantissa, tempExpo));
    }