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);
    }

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

  • 相关阅读:
    690. 员工的重要性
    91. 解码方法
    153. 寻找旋转排序数组中的最小值
    81. 搜索旋转排序数组 II
    33. 搜索旋转排序数组
    80. 删除有序数组中的重复项 II
    5708. 统计一个数组中好对子的数目
    高精度除法
    易闻app
    2021.4.13
  • 原文地址:https://www.cnblogs.com/gleam/p/3607984.html
Copyright © 2011-2022 走看看