【问题标题】:Why does 1 / 10 equal zero unless I use variables? [duplicate]除非我使用变量,否则为什么 1 / 10 等于零? [复制]
【发布时间】:2011-09-27 20:12:05
【问题描述】:

可能重复:
Why can't I return a double from two ints being divided

使用 gcc 的 C 语言中的这条语句:

float result = 1 / 10;

产生结果 0。

但是如果我分别用值 1 和 10 定义变量 a 和 b 然后执行:

float result = a / b;

我得到 0.1 的预期答案

什么给了?

【问题讨论】:

  • 变量ab有哪些类型?
  • 你应该试试float result = 1.0 / 10.0;
  • 我相信这是因为 1/10 它是在编译时解决的,并且因为您没有指定任何十进制数,编译器认为它是整数。尝试制作 1.0/10.0
  • 我今天回答了一个这样的问题。 stackoverflow.com/q/7571326/550514
  • 为什么不直接写:float result = 0.1;

标签: c gcc


【解决方案1】:

/ 运算符应用于两个整数时,它是一个整数除法。所以,1 / 10 的结果是 0。

/ 运算符应用于至少一个浮点变量时,它是一个浮点除法。结果将是 0.1,如您所愿。

例子:

printf("%f\n", 1.0f / 10); /* output : 0.1 (the 'f' means that 1.0 is a float, not a double)*/
printf("%d\n", 1 / 10); /* output : 0 */

变量示例:

int a = 1, b = 10;

printf("%f\n", (float)a / b); /* output : 0.1 */

【讨论】:

  • 对此进行扩展:float result = 1 / 10.0 将给出预期结果。
【解决方案2】:

这是因为110 是整数常量,所以除法是使用整数运算完成的。

如果您的变量ab 中至少有一个是float,它将使用浮点运算来完成。

如果您想使用数字文字,请使用符号将其中至少一个设为 float 文字,例如:

float result = 1.0f / 10;

或者将其中一个投给float,那会更详细一点:

float result = 1 / (float)10;

【讨论】:

    【解决方案3】:

    1 和 10 都是整数,并且将返回一个整数,当您定义 a 和 b 时,您将定义为浮点数。如果您使用 1.0 和 10.0,它将返回正确的结果

    【讨论】:

      【解决方案4】:

      如果你想要浮动而不是像下面这样转换它。

      浮点结果 = (float)a/b;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-08
        • 1970-01-01
        • 2020-09-10
        • 2019-06-26
        • 1970-01-01
        • 2021-03-15
        • 1970-01-01
        • 2015-04-28
        相关资源
        最近更新 更多