【发布时间】:2016-06-27 01:32:57
【问题描述】:
在很长一段时间没有编程之后,我正在为下个月的一项任务使用 C++。我了解到变量可以被溢出:具体来说,浮点类型变量不会像双精度类型那样包含尽可能多的小数。但是,我尝试了这段代码:
#include <iostream>
#include <iomanip>
int main()
{
using namespace std;
cout << setprecision(20);
double t(0.1);
float g(0.1);
cout << t << endl;
cout << g << endl;
static_cast<float>(t);
cout << t << endl;
}
而且,令我惊讶的是,第一个和最后一个(double t 和 float t)的精度相同,而 float g 的精度更低。这对我来说似乎有点违反直觉,static_cast 如何保持数字的精度?
非常感谢。
【问题讨论】:
-
演员表不是现场操作。他们返回转换后的值;他们不直接修改原件。因为你从不存储你的演员的结果,所以什么都不做。
-
float g(0.1f);会更正确