2013-11-14 324 views
2

我不是C++开发人员,但今天我找到了一个C++代码并试图理解它。所以,我已经堆放在这段代码:C++将int转换为double

int m = 2, n = 3, i = 1; 
double mid = (double)m/n * i; 
int d = (int)mid + 1; 

printf("%d %d\n", mid, d); 

其将被打印到控制台的结果是:1431655765 1071994197.这似乎与变量m的铸造翻一番有关,但我不知道它是如何发生的。我需要有人帮助我理解它。提前致谢!

+0

这个问题的标题似乎不匹配它的的确确是。 – dbliss

+0

[这里](http://www.cplusplus.com/doc/tutorial/typecasting/)是关于类型转换的文档页面。 – dbliss

+0

C++?那么最好使用'static_cast (m)'而不是旧式'(double)m' – Anubis

回答

4

您应该在printf中打印一个带有%lf格式说明符的双重(mid)。

+3

输出的格式说明符应该是'%f';这适用于float和double,因为当通过省略号传递时,浮点数会提升为double。 '%lf'无效。对于'scanf','%f'表示float,'%lf'表示double,'%Lf'表示长整倍。 –

1

改变的printf到

printf("%f %i\n", mid, d); 

将实际打印你所期望的,即0.666667 1