Faster alternative to Convert.ToDouble(string)

前端 未结 7 2298
陌清茗
陌清茗 2020-12-17 23:35

Is there a faster way to convert a string to double than Convert.ToDouble?

I have monitored System.Conv

相关标签:
7条回答
  • 2020-12-18 00:21

    You can save about 10% by calling Double.TryParse with specific cached instances of NumberStyles and IFormatProvider (i.e. CultureInfo):

    var style = System.Globalization.NumberStyles.AllowDecimalPoint;
    var culture = System.Globalization.CultureInfo.InvariantCulture;
    double.TryParse("1.34515", style, culture, out x);
    

    Both Convert.ToDouble and Double.Parse or Double.TryParse have to assume the input can be in any format. If you know for certain that your input has a specific format, you can write a custom parser that performs much better.

    Here's one that converts to decimal. Conversion to double is similar.

    static decimal CustomParseDecimal(string input) {
        long n = 0;
        int decimalPosition = input.Length;
        for (int k = 0; k < input.Length; k++) {
            char c = input[k];
            if (c == '.')
                decimalPosition = k + 1;
            else
                n = (n * 10) + (int)(c - '0');
        }
        return new decimal((int)n, (int)(n >> 32), 0, false, (byte)(input.Length - decimalPosition));
    }
    

    My benchmarks show this to be about 5 times faster than the original for decimal, and up to 12 times if you use ints.

    0 讨论(0)
提交回复
热议问题