C double没有按预期工作

问题描述:

我正在写一些需要将29除以10的数据。但是当我这样做并将其存储在双精度数据库中时,它将输出2.0000而不是2.9。有人可以解释为什么会发生这种情况,以及如何解决它?C double没有按预期工作

double a = 29/10; 

output: 2.0000 
+1

可能的重复[为什么将两个整数分开不会浮动?](http://*.com/questions/16221776/why-dividing-two-integers-doesnt-get-a-float) – OldProgrammer

double按预期工作,它只是你没有分配给它double类型的表达式。

你分配什么这是一个int,将29,一个int,通过10的结果,int。这是2,因为在分割整数时其余部分被丢弃。

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

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

尝试(double)29/1029.0/10

+1

For清晰度,写'(双)29/10'会更好 – chqrlie

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

你应该做一个浮点除法与

double a = 29.0/10.0; 

你应该阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic如果你想发现浮点运算的所有细节。