首页 > 解决方案 > 在 C++ 中将 int 转换为 double

问题描述

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

#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;
}

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

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

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

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

谢谢!

标签: c++casting

解决方案


我无法进行从 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也可能是一种选择。


推荐阅读