【问题标题】:Why do I get 0 when I print the result of fraction in C? [duplicate]为什么我在 C 中打印分数的结果时得到 0? [复制]
【发布时间】:2015-10-25 03:34:41
【问题描述】:

我的代码中有这样的内容:

a = -2;
b = 1/a;

printf("%d", b);

printf 正在打印 0。有人知道这是为什么吗?我该怎么做才能得到-0.5?我还尝试了"%.2f",这给了我 0.00。

谢谢

【问题讨论】:

  • 变量ab 在您的代码中声明为int,对吗?尝试将其中一个声明为浮点数,然后,您将得到-0.5。在你通过%.2f 打印之前,值已经是0,你只是从0 转换,因此转换结果也是0
  • @EricWang:将其中一个声明为 float 是行不通的。如果 b 是 int 它不能保持 -0.5。如果 a 是 int,你又会陷入整数算术问题。
  • @lesnar 是的,你是对的,我想还有另一个变量 c 声明为浮点数,并且 c = a / b,需要 a 或 b 中的一个为浮点数。

标签: c decimal fractions negative-number


【解决方案1】:

您遇到了整数运算。在 C 和许多其他语言中,像 1/2 这样的除法会给您带来意想不到的结果,因为 12 都是整数,结果也是整数。整数不能存储0.5,因此结果的小数部分会被截断,最终得到 0。

要执行小数运算,您需要使用floats、doubles 等。您可以直接键入1.0 / -2.0,也可以使用(double) a / b 将值转换为其他类型。只要至少有一个操作数处理小数部分,您的结果也将包含小数。

【讨论】:

    【解决方案2】:

    由于没有指定 a 和 b 的数据类型,我假设它们是 int 类型。

    在 C 中,操作的结果取决于操作数的数据类型。结果不能比操作数本身具有更高的精度/准确度/大小。您面临的问题与整数算术规则有关。

    现在,在您的情况下:b = 1/a 中的 -2 和 1 都是整数,因此结果将被截断为整数,因此 -1/2 = -0.5 截断为 0。%.2f 无济于事,因为b中的值已经是0了。

    所以使 b 为 -0.5。您需要将 a 和 b 作为浮点数并使用 %f 打印。

    或者,

    您可以将 a 设为 int,将 b 设为 float,并将 b 写入 1.0/a。 (这里的 1 是 float a is int 所以结果是 float 类型转换 a 到 int)。

    或者,

    通过类型转换:b = 1 / (float)a;

    你需要通过类型转换规则。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 2022-10-23
      • 1970-01-01
      • 2020-10-10
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多