C双重不按预期工作
我正在写一些我需要将29除以10的地方。但是当我这样做并将其存储在一个double中时,它输出2.0000而不是2.9。 有人可以解释为什么会发生这种情况以及如何解决这个问题?
double a = 29/10; output: 2.0000
double
精度按预期工作,只是你没有为它赋予double
类型的表达式。
你赋予它的是一个int
,一个除以29
,一个int
, 10
,一个int
。 这是2
,因为在除以整数时会丢弃余数。
将29
更改为29.0
或10
更改为10.0
将解决此问题。
这是一个经典的C错误:你正在进行整数除法并请求浮点结果。
你应该做一个浮点除法
double a = 29.0/10.0;
如果要发现有关浮点运算的所有细节,您应该阅读每个计算机科学家应该知道的关于浮点运算的内容。
29 / 10
执行整数除法。 结果是2(余数为9)。
尝试(double)29 / 10
29.0 / 10
或29.0 / 10
。