• C中浮点数转字符串


    求浮点数转换成字符串,如何才能获得比较正确的字符串。
    用printf("%f ", (float)5); 这种方式转换出来的结果是 5.000000 ,末尾都会带6位小数。

    控制精度在6位,虽然控制精度在6位,但并不希望输出时后面出现多余0。

    需要:

        精度控制 6 位,剔除多余占位零。

    printf和gcvt这两个函数多有些不太满足要求。


    实际想得到的结果
    float                  string
    ---------------------------------
    5                      "5.0"
    5.1                    "5.1"
    5.001                  "5.001"
    5.0000001              "5.0"

    现在的结果(-_-!!)
    float                  string
    ---------------------------------
    5                      "5.000000"
    5.1                    "5.100000"
    5.001                  "5.001000"
    5.0000001              "5.000000"

    大致实现方法

      1、正常格式化浮点为字符
      2、清除多余的占位零

    char * float2str(float val, int precision, char *buf)
    {
        char *cur, *end;
        
        sprintf(buf, "%.6f", val);
        if (precision < 6) {
            cur = buf + strlen(buf) - 1;
            end = cur - 6 + precision; 
            while ((cur > end) && (*cur == '0')) {
                *cur = '';
                cur--;
            }
        }
        
        return buf;
    }
    
    int main(int argc, char** argv)
    {
        char buf[128];
        
        printf("%s
    ", float2str((float)5, 2, buf));   
        printf("%s
    ", float2str((float)5.1, 2, buf));   
        printf("%s
    ", float2str((float)5.12, 2, buf));   
        printf("%s
    ", float2str((float)5.123, 2, buf));   
        printf("%s
    ", float2str((float)5.12345678, 2, buf));   
    
        return (EXIT_SUCCESS);
    }

    运行结果比较满意,达到想要的效果

  • 相关阅读:
    jxl导出excel的问题
    java.lang.IllegalStateException: getOutputStream() has already been called for this response解决方案
    在MyEclipse中用debug调试应用程序
    添加 MyEclipse Persistence Tools 类库
    使用递归算法结合数据库解析成java树形结构
    String.format()用法
    在ubuntu下使用Eclipse搭建Hadoop开发环境
    Ubuntu下伪分布式模式Hadoop的安装及配置
    ubuntu10.10手工安装jdk1.6
    docker 清理容器和镜像
  • 原文地址:https://www.cnblogs.com/gleam/p/3607984.html
Copyright © 2020-2023  润新知