类型转换 - 求一个高效的double转char*的算法,C或C++
伊谢尔伦
伊谢尔伦 2017-04-17 13:10:43
0
3
701
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(3)
大家讲道理

sprintf难道不够高效?
不用库函数把sprintf关于%f的拿出来就好了。

いいねを押す +0
伊谢尔伦

如果你想连sprintf对%的处理都省掉的话,建议使用_gcvt_s函数。

使用方法如下:

    char buffer[320];
    _gcvt_s(buffer, 320, number, 30);
    vint len = (vint)strlen(buffer);
    if (buffer[len - 1] == '.')
    {
        buffer[len - 1] = '\0';
    }

如果你使用的编译期没有_gcvt_s的话,可以自己封装一个:

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 = '\0';
    }
    if(zero[-1] == '.') *--zero = '\0';
}

这样程序在别的编译期下既,而且在VC++下面又可以发挥优异的性能。

いいねを押す +0
伊谢尔伦

为什么没有人提grisu算法。它是一个最快的,“完全正确”的算法
放库跑:https://github.com/night-shift/fpconv

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!