[英]Converting int to double in C++
我无法从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
等于8
,而不是8.0
,不仅在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
也可能是一个选项。
毫无疑问, d1
和d2
是double
s。 您也需要在标题<iomanip>
找到std::setprecision()
(显然还有std::fixed
):
#include <iostream>
#include <iomanip>
int main()
{
int i = 8;
double d1 = i;
double d2 = static_cast<double>(i);
std::cout << "i = " << i << std::fixed << std::setprecision(2) << ", d1 = " << d1 << ", d2 = " << d2 << std::endl;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.