将C++中的整型转换为双精度浮点型的强制类型转换

4

我不是C++开发人员,但今天我找到了一段C++代码并试图理解它。所以我卡在了这段代码上:

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转换为double有关,但我不知道它是如何发生的。我需要有人帮助我理解。提前致谢!

这个问题的标题似乎不符合它实际讨论的内容。 - abcd
这里是关于类型转换的文档页面:http://www.cplusplus.com/doc/tutorial/typecasting/。 - abcd
C++?那最好使用static_cast<double>(m)而不是旧式的(double) m - Anubis
3个回答

5

printf中,您应该使用%lf格式说明符打印一个双精度浮点数(mid)。


3
输出时的格式说明符应为%f,对于float和double都适用,因为当通过省略号传递时,float会提升为double。 %lf是无效的。对于scanf函数,%f表示float,%lf表示double,%Lf表示long double。 - Pete Becker

1
将printf更改为


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

实际上会打印出您所期望的内容,即0.666667 1。

0
一个更简单的解决方法是:
double m_Doubled;
m_Doubled = static_cast(m);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接