开发者社区> 问答> 正文

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

形如
double 33.333 => char* "33.333"
double 1e+5 => char* "100000"

要求:

考虑浮点数范围(不能直接强转为int或long)
考虑浮点数的精度(处理边界问题)
尽量不使用其它库函数

展开
收起
a123456678 2016-06-08 22:39:53 3169 0
1 条回答
写回答
取消 提交回答
  • 如果你想连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++下面又可以发挥优异的性能。

    2019-07-17 19:32:51
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载