Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何获取浮点值的小数位数?_C_Floating Point_Decimal - Fatal编程技术网

C 如何获取浮点值的小数位数?

C 如何获取浮点值的小数位数?,c,floating-point,decimal,C,Floating Point,Decimal,我想用科学符号表示最终产品的四舍五入。 因此,如果80.55和879.5689给出70849.281250,则最终打印函数输出70849.28 有没有办法获得输入的两个浮点数的小数位数?(我知道从技术上讲,它们没有小数点,但有可能吗?)如果我有两个整数声明为每个整数的小数点位数,我可以使用If/else进行比较,并将至少一个声明为另一个整数,但我不知道如何在此处使用int来代替5:%.5f 如何获取浮点值的小数位数? 有没有办法获得输入的两个浮点数的小数位数 将一行用户输入读入字符串。强烈推荐f

我想用科学符号表示最终产品的四舍五入。 因此,如果80.55和879.5689给出70849.281250,则最终打印函数输出70849.28

有没有办法获得输入的两个浮点数的小数位数?(我知道从技术上讲,它们没有小数点,但有可能吗?)如果我有两个整数声明为每个整数的小数点位数,我可以使用If/else进行比较,并将至少一个声明为另一个整数,但我不知道如何在此处使用int来代替5:%.5f

如何获取浮点值的小数位数?
有没有办法获得输入的两个浮点数的小数位数

  • 将一行用户输入读入字符串。强烈推荐
    fgets()

  • strchr()
    或helper code搜索小数点,用
    搜索数字的结尾“%n”

  • 也许:

    static int find_prec(const char *s, int length) {
      for (int i=0; i < length; i++) {
        if (s[i] == '.') {
          i++;
          int p = 0;
          while (isdigit((unsigned char) s[i+p])) {
            p++;
          }
          return p;
        }
      }  
      return 0;
    }
    
    ...
    if (fgets(buffer, sizeof buffer, stdin)) {
      double x[2];
      int n[2];
      if (sscanf(buffer, "%f%n %f%n", &x[0], &n[0], &x[1], &n[1]) == 2) {
        int num_dp[2];
        num_dp[0] = find_prec(buffer, n[0]);
        num_dp[1] = find_prec(buffer + n[0], n[1] - n[0]);
    
    static int find_prec(常量字符*s,int长度){
    for(int i=0;i
    如何获取浮点值的小数位数?
    有没有办法获得输入的两个浮点数的小数位数

  • 读取一行用户输入的字符串。强烈推荐
    fgets()

  • strchr()
    或helper code搜索小数点,用
    搜索数字的结尾“%n”

  • 也许:

    static int find_prec(const char *s, int length) {
      for (int i=0; i < length; i++) {
        if (s[i] == '.') {
          i++;
          int p = 0;
          while (isdigit((unsigned char) s[i+p])) {
            p++;
          }
          return p;
        }
      }  
      return 0;
    }
    
    ...
    if (fgets(buffer, sizeof buffer, stdin)) {
      double x[2];
      int n[2];
      if (sscanf(buffer, "%f%n %f%n", &x[0], &n[0], &x[1], &n[1]) == 2) {
        int num_dp[2];
        num_dp[0] = find_prec(buffer, n[0]);
        num_dp[1] = find_prec(buffer + n[0], n[1] - n[0]);
    
    static int find_prec(常量字符*s,int长度){
    for(int i=0;i
    如果您使用
    fgets
    输入值,您可以使用
    strchr()
    找到小数点的位置(如果有),并计算从中输入的小数位数和字符串长度。然后使用
    sscanf()
    strof()
    提取值。别忘了提取。最后,如果你能从20世纪的
    浮动
    向前移动到
    double
    请这样做。这将需要
    strtod()
    。使用
    printf(“%.*f”,places,value);
    printf(“%.*f”,places1
    也许某个善良的灵魂会为您发布免费代码,但事实并非如此。请尝试实现我的第一条评论中的内容,以查找每个输入中的小数点。我不明白您在这里试图实现什么。您似乎希望以两个操作数的小数点的最小值输出结果--是吗?但对于乘法,这在数学上毫无意义。对于乘法和除法(与加法和减法相反),
    12.3*4.567
    vs
    1.23*45.67
    ,得到的结果肯定不一样,您希望保留有效数字,而不是小数位数。80.55*879.5689=‭70849.274895‬, 不是70849.281250。为什么要70849.28而不是70849.27的四舍五入输出?如果使用
    fgets
    输入值,则可以使用
    strchr()
    找到小数点的位置(如果有),并计算从中输入的小数位数和字符串长度。然后使用
    sscanf()
    strtof()
    提取值。别忘了。最后,如果你能从20世纪
    float
    double
    请这样做。这将需要
    strtod()
    。使用
    printf(%.*f),places,value);
    printf(%.*f),places1
    也许某个善良的灵魂会为您发布免费代码,但事实并非如此。请尝试实现我的第一条评论中的内容,以查找每个输入中的小数点。我不明白您在这里试图实现什么。您似乎希望以两个操作数的小数点的最小值输出结果--是吗?但对于乘法,这在数学上毫无意义。对于乘法和除法(与加法和减法相反),
    12.3*4.567
    vs
    1.23*45.67
    ,得到的结果肯定不一样,您希望保留有效数字,而不是小数位数。80.55*879.5689=‭70849.274895‬, 不是70849.281250。为什么要70849.28而不是70849.27的四舍五入输出?