【问题标题】:C Programming Why is the float value changing [closed]C编程为什么浮点值会改变[关闭]
【发布时间】:2018-08-30 14:47:34
【问题描述】:

我需要有关此程序的帮助。浮点数组购买 [2] 值为 90.50,但当我运行代码时,它从 90.50 变为 90.5010.990000。为什么?购买[0] 和购买[1] 打印正常。任何帮助将不胜感激。

#include <stdio.h>

int main() {
    float purchases[3] = {10.99, 14.25, 90.50};
    float total = 0;
    int k;

    //Total the purchases
    printf("%.2f %.2f %.2f", purchases[0], purchases[1], purchases[2]); // Just so I know whats going on

    for (k = 0; k < 3; k++) {
        total += purchases[k];
        printf("%f\n", total); // Just so I know whats going on
        printf("%d\n", k);  // Just so I know whats going on
    }

    printf("Purchases total is %6.2f\n", total);
}

【问题讨论】:

  • "%.2f %.2f %.2f" - 这里没有新行
  • 我搜索了答案,但因为我是 c 新手,所以我不知道我在寻找什么。对不起,它是重复的。给我一个月,我会好很多。
  • @P__J__:这个问题的抱怨是关于“90.5010.990000”,这是由printf中缺少换行符引起的,与浮点运算无关。请不要将问题标记为与that question 重复,因为它们在其中某处包含浮点数。
  • @chux:这个问题的抱怨是关于“90.5010.990000”,这是由printf中缺少换行符引起的,与浮点运算无关。请不要将问题标记为与that question 重复,因为它们在其中的某处包含浮点数。
  • @EricPostpischil - 请不要打扰所有投票关闭的人,因为系统愚蠢地将他们聚集在一起,因为一个关闭的原因。你可以应用常识,不是吗?

标签: c arrays loops floating-accuracy


【解决方案1】:

当您打印purchases 数组的内容时,您不会打印换行符。因此,当您在循环中第一次打印 total 时,它会出现在同一行。

添加换行符:

printf("%.2f %.2f %.2f\n", purchases[0], purchases[1], purchases[2]);

输出:

10.99 14.25 90.50
10.990000
0
25.240000
1
115.739998
2
Purchases total is 115.74

【讨论】:

    【解决方案2】:

    这个:

    90.5010.990000

    是 90.50,然后是 10.990000。您忘记使用换行符了。

    改变这个:

    printf("%.2f %.2f %.2f", ..
    

    到这里:

    printf("%.2f %.2f %.2f/n", ..
    

    【讨论】:

      【解决方案3】:

      感谢@StoryTeller。没有新线!小学生错对了。

      应该是:

      printf("%.2f %.2f %.2f\n", purchases[0], purchases[1], purchases[2]);
      

      很抱歉打扰大家。

      #include <stdio.h>
      
      int main() {
          float purchases[3] = {10.99, 14.25, 90.50};
          float total = 0;
          int k;
      
          //Total the purchases
          printf("%.2f %.2f %.2f\n", purchases[0], purchases[1], purchases[2]); // Just so I know whats going on
      
          for (k = 0; k < 3; k++) {
              total += purchases[k];
              printf("%f\n", total); // Just so I know whats going on
              printf("%d\n", k);  // Just so I know whats going on
          }
      
          printf("Purchases total is %6.2f\n", total);
      }
      

      【讨论】:

      • 有时你必须花时间向duck解释每个字符。
      • 刚刚了解橡皮鸭。下次会告诉鸭子。必须更加警惕。
      • @StoryTeller 太糟糕了 QuackOverflow 只是愚人节的玩笑。 :(
      • 哈哈。我可能需要更多地使用该网站而不是这个!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 2023-01-31
      • 1970-01-01
      • 2016-06-20
      相关资源
      最近更新 更多