C双重不按预期工作

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

double a = 29/10; output: 2.0000 

double精度按预期工作,只是你没有为它赋予double类型的表达式。

你赋予它的是一个int ,一个除以29 ,一个int10 ,一个int 。 这是2 ,因为在除以整数时会丢弃余数。

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

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

你应该做一个浮点除法

 double a = 29.0/10.0; 

如果要发现有关浮点运算的所有细节,您应该阅读每个计算机科学家应该知道的关于浮点运算的内容。

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

尝试(double)29 / 10 29.0 / 1029.0 / 10