【问题标题】:C - double result returning the value of 0 [duplicate]C - 返回值 0 的双精度结果 [重复]
【发布时间】:2016-04-17 19:51:20
【问题描述】:
#include <stdio.h>

int main(int argc, const char * argv[]) {

    int a = 10;
    int b = 20;
    double result = a / b;
    printf("%d divided by %d makes %f\n", a, b, result);

    return 0;
}

期待%f 会返回 0.500000,我运行了代码,结果是 0.000000。

result 变量返回零值是否有原因?

【问题讨论】:

  • 双倍不应该是 %lf 吗?

标签: c


【解决方案1】:

因为abints,所以它正在执行整数除法,试试这个

double result = (float) a / (float) b;

【讨论】:

  • 更具体地说,编译器并不关心您将表达式分配给什么类型。操作的精度仅取决于操作数类型。在这种情况下,int / int 使用整数除法。通过将一个(或两个)参数转换为float,该操作被提升为浮点除法。
  • 感谢您的回答。我现在必须再等几分钟才能接受您的回答。
  • 我能再问你一个问题吗?如果我在 Java 中运行相同的代码,例如 double result = (float) a / (float) b; 并运行 System.out.println(result);,现在它会返回一个非常奇怪的值,例如 0.6000000238418579。你能解释一下原因吗?
  • @newbieprogrammer 不,抱歉我不懂java。
  • 好吧.. 最好看看其他问题。无论如何感谢您的回答!我现在接受了:)
【解决方案2】:

您将两个整数相除,这将提供一个整数结果。在 C 中,这意味着它将简单地丢弃小数部分,留下 0。

您可以按如下方式转换一个或两个操作数(a 或 b),它应该被清除:

double result = (float) a / b;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    相关资源
    最近更新 更多