【问题标题】:Division result is always zero [duplicate]除法结果始终为零[重复]
【发布时间】:2011-01-21 16:48:28
【问题描述】:

我得到了这个 C 代码。

#include <stdio.h>

int main(void)
{
        int n, d, i;
        double t=0, k;
        scanf("%d %d", &n, &d);
        t = (1/100) * d;
        k = n / 3;
        printf("%.2lf\t%.2lf\n", t, k);
        return 0;
}

我想知道为什么我的变量 't' 总是为零(在 printf 函数中)?

【问题讨论】:

标签: c double division multiplication integer-division


【解决方案1】:

因为在这个表达式中

t = (1/100) * d;

1和100是整数值,整数除法截断,所以this和this一样

t = (0) * d;

你需要把它变成一个像这样的浮点常量

t = (1.0/100.0) * d;

你也可以这样做

k = n / 3.0;

【讨论】:

  • 或者直接使用d / 100.0
  • 在我的情况下,这就是我最终停止为我的部门获得 0 所做的事情:Double ratio = (Convert.ToDouble(x) / Convert.ToDouble(y));
  • @ChristopherD.Emerson 那是 C#;这个问题是关于 C 的(也适用于 C++)。
【解决方案2】:

您正在使用整数除法,而 1/100 在整数除法中总是向下舍入为零。

如果您想进行浮点除法并简单地截断结果,您可以确保您使用的是浮点字面量,并且 d 将为您隐式转换:

t = (int)((1.0 / 100.0) * d);

【讨论】:

    【解决方案3】:

    我认为是因为

    t = (1/100) * d;
    

    1/100 作为整数除法 = 0

    那么 0 * d 总是等于 0

    如果你做 1.0/100.0 我认为它会正常工作

    【讨论】:

      【解决方案4】:
      t = (1/100) * d; 
      

      总是等于0,你可以这样做

      t=(1%100)*d 
      

      并将其添加到 0

      【讨论】:

        猜你喜欢
        • 2021-02-28
        • 2016-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-02
        • 2012-01-16
        • 2020-01-07
        • 1970-01-01
        相关资源
        最近更新 更多