double 返回时四舍五入

double gets rounded when returned

我如何 return 加倍而不得到 rounded:

int function() {
    double d = 5.894; 
    printf("d=%f\n", d);
    return d;
}

int main() {
    double d = function();
    printf("d=%f\n", d);
    return 0;
}

这给了我

d=5.894000
d=5.000000

我在这里错过了什么?

你的函数 returns ٰint 它必须 return double

改变

int function()

double function()

iharob的回答当然是正确的,但我认为知道以后如何避免这种错误也很重要。

我也没有找到任何关于此行为的明确引用(从 "large" 数字类型隐式转换为 "smaller" 类型),所以我问了 关于这个。

简而言之,通过提供正确的编译警告标志,可以在编译时发现这些错误(例如 -Wconversion),因为它几乎总是错误。

但是,这种行为是设计使然,正如 Chris 在评论中提到的那样,有时它 might be useful 在性能方面。