C双倍按预期工作

时间:2016-11-05 21:54:10

标签: c

我正在写一些我需要将29除以10的地方。但是当我这样做并将其存储在一个double中时,它输出2.0000而不是2.9。有人能解释为什么会发生这种情况以及如何解决这个问题吗?

double a = 29/10;

output: 2.0000

3 个答案:

答案 0 :(得分:3)

double按预期工作,只是因为您没有为其指定double类型的表达式。

您指定的内容为int,是29int10除以int的结果。这是2,因为在除以整数时会丢弃余数。

29更改为29.010更改为10.0可解决此问题。

答案 1 :(得分:1)

29 / 10执行整数除法。结果是2(余数为9)。

尝试(double)29 / 1029.0 / 10

答案 2 :(得分:1)

这是一个经典的C错误:你正在进行整数除法并请求浮点结果。

您应该使用

进行浮点除法
        return parent = a;

如果要发现有关浮点运算的所有详细信息,则应阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic