c++ - 在 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;
}
d1
和d2
equals 8
,而不是8.0
,不仅在QtCreator 的调试器中stdout
,而且在 QtCreator 的调试器中。
AFAIK,d1
应该d2
是8.0
,那么不应该吗?
谁能告诉我我做错了什么?
我正在设置 g++ 编译器,版本 7.4.0,符合 C++11。
谢谢!
解决方案
我无法进行从 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
也可能是一种选择。
推荐阅读
- c# - 如何使用 C# 在谷歌电子表格中搜索或查找数据?
- google-cloud-functions - 为什么一次可调用的客户端调用会调用两次 onCall firebase 函数?
- python - 如何在 matplotlib.axes.Axes.stem 图中显示时间线?
- python - 使用简单的 python tcp 脚本连接同一主机上的两个 Docker 容器,但出现连接被拒绝错误
- arduino - 通过带有串口包的 NodeJS 应用程序硬重置 ESP32
- vue.js - 渲染按钮时 V-IF 无反应
- vhdl - VHDL 组件可以完美地分开工作;在上层实体中连接它们时遇到问题
- angular - Angular 使用 Resolver 为几个字段预填充数据,resolver 将返回一个 Observable 内部订阅者
- image - 如何从 Google 云端硬盘创建图像文件并将其插入到 Google Apps 脚本 UrlFetchApp.fetch 对外部 API 的调用中?
- javascript - 可以为视频添加新来源吗?