【发布时间】:2013-12-06 19:18:23
【问题描述】:
我有一个简单的 C++ 程序,我认为它会将 f 和 g 中定义的双精度值打印为双精度值……但 C++ 将它们打印为整数。我检查了 cout 的默认精度,当我运行它时,输出显示默认精度应该是 6,所以我很困惑为什么双精度不能正确打印。
#include <iostream>
#include <stdio.h>
int main() {
double f = 735416.416898;
double g = f + 0.3;
std::cout << "default precision is " << std::cout.precision() << std::endl;
std::cout << "[c++] f = " << f << std::endl;
std::cout << "[c++] g = " << g << std::endl;
printf("[c] f = %f\n", f);
printf("[c] g = %f\n", g);
f = 735416.516898;
g = f + 0.3;
std::cout << "[c++] f = " << f << std::endl;
std::cout << "[c++] g = " << g << std::endl;
printf("[c] f = %f\n", f);
printf("[c] g = %f\n", g);
return 0;
}
我看到的输出是:
kiran@kiran-VirtualBox:~/test$ g++ -o test test.cpp
kiran@kiran-VirtualBox:~/test$ ./test
[c++] f = 735416
[c++] g = 735417
[c] f = 735416.416898
[c] g = 735416.716898
[c++] f = 735417
[c++] g = 735417
[c] f = 735416.516898
[c] g = 735416.816898
因为默认精度显示为 6,cout 不应该也显示小数点后 6 位吗?
如果我这样做
std::cout << std::fixed << f
打印正确(包含所有小数位)。
只是想知道是否有人可以向我解释这种行为?是预期的吗?我是否应该使用 std::fixed 来正确强制打印双打?
【问题讨论】:
-
setprecision呢? -
它只显示6位精度,而你的数字在小数点前有6位,所以十位需要7位精度才能显示。
标签: c++