首頁  >  問答  >  主體

类型转换 - 求一个高效的double转char*的算法,C或C++

伊谢尔伦伊谢尔伦2715 天前661

全部回覆(3)我來回復

  • 大家讲道理

    大家讲道理2017-04-17 13:12:43

    sprintf不夠有效率?
    不用函式庫函數把sprintf關於%f的拿出來就好了。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:12:43

    如果你想連sprintf對%的處理都省掉的話,建議使用_gcvt_s函數。

    使用方法如下:

        char buffer[320];
        _gcvt_s(buffer, 320, number, 30);
        vint len = (vint)strlen(buffer);
        if (buffer[len - 1] == '.')
        {
            buffer[len - 1] = '
    void _gcvt_s(char* buffer, size_t size, double value, vint numberOfDigits)
    {
        sprintf(buffer, "%f", value);
        char* point = strchr(buffer, '.');
        if(!point) return;
        char* zero = buffer + strlen(buffer);
        while(zero[-1] == '0')
        {
            *--zero = 'rrreee';
        }
        if(zero[-1] == '.') *--zero = 'rrreee';
    }
    
    '; }

    如果你使用的編譯期沒有_gcvt_s的話,可以自己封裝一個:

    rrreee

    這樣程式在別的編譯期下既,而且在VC++下面又可以發揮優異的效能。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:12:43

    為什麼沒有人提grisu演算法。它是一個最快的,「完全正確」的演算法
    放庫跑:https://github.com/night-shift/fpconv

    回覆
    0
  • 取消回覆