在 C++ 中将 int 转换为 double

can*_*las -3 c++ casting

我无法从intdouble到 工作进行简单的转换

#include <iostream>

int main()
{
  int i = 8;
  double d1 = i;
  double d2 = static_cast<double>(i);
  std::cout << "i = " << i << ", d1 = " << d1 << ", d2 = " << d2 << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

d1d2equals 8,而不是8.0,不仅在stdout,而且在 QtCreator 的调试器中。

AFAIK,d1应该d28.0,那么不应该吗?

谁能告诉我我做错了什么?

我正在设置 g++ 编译器,版本 7.4.0,符合 C++11。

谢谢!

eer*_*ika 5

我无法从 int 到 double 进行简单的转换来工作

实际上,转换本身效果很好。

d1 和 d2 等于 8,而不是 8.0

8 和 8.0 是将同一值表示为字符串的两种方式。价值上没有区别。

AFAIK,d1 和 d2 应该是 8.0,不是吗?

是的,因为 8 和 8.0 是相同的精确值。

谁能告诉我我做错了什么?

你的错误是期望输出为 8.0。由于输出流的默认格式设置,正确的输出是 8。

另一个错误是假设从 int 到 double 的转换存在问题,而问题实际上在于文本输出的格式。

如果您的意图是输出 8.0,那么您的错误就是没有使用正确的流操纵器来实现该格式。特别是,您需要使用std::fixed操纵器来显示固定的小数位数,即使它们为零。您可以用来std::setprecision设置要显示的小数位数。根据您希望在不同情况下格式化输出的方式,std::showpoint也可能是一个选项。