这个问题在这里已有答案:
C ++
float f = 0.123456789;
double d = 0.123456789;
cout << "float = " << f << endl;
cout << "double = " << d << endl;
产量
float = 0.123457
double = 0.123457
为什么? 如何使用双倍和长双? 是否有一个大于长双的变量?
您所看到的并不完全是变量的内容,而是标准的ouptut流在舍入后输出的内容。从标题std::setprecision
中查找<iomanip>
函数。
对Coliru的快速测试:
float f = 0.123456789;
double d = 0.123456789;
std::cout << "float = " << std::setprecision(13) << f << std::endl;
std::cout << "double = " << std::setprecision(13) << d << std::endl;
产生输出:
float = 0.1234567910433
double = 0.123456789
它表明,实际上,float和double在它们可以表示的数字方面不是同一类型。 (提示:这甚至不是存储在浮点数中的确切数字,只有一个舍入到13位有效数字)。