zoukankan      html  css  js  c++  java
  • 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);
    }

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

  • 相关阅读:
    kafka consumer防止数据丢失(转)
    Cglib源码分析 invoke和invokeSuper的差别(转)
    如何查看k8s存在etcd中的数据(转)
    k8s Nodeport方式下service访问,iptables处理逻辑(转)
    项目演化系列--验证体系
    项目演化系列--路由解析
    项目演化系列--开篇
    基于SWFUpload的angular上传组件
    Query Object--查询对象模式(下)
    Query Object--查询对象模式(上)
  • 原文地址:https://www.cnblogs.com/gleam/p/3607984.html
Copyright © 2011-2022 走看看