我声明了一个包含10个元素的数组并用0.0 .. 9.9初始化它,它的输出是完美的,除了0.0已经变为0,为什么会这样?
#include <iostream>
using namespace std;
int main(void)
{
int const SIZE = 10;
double number[SIZE] = {0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9};
for(int i(0) ; i < SIZE ; i++)
{
cout << number[i] << endl ;
}
system("PAUSE");
}
Run Code Online (Sandbox Code Playgroud)
谢谢,
输出:0 //应该是0.0而不是0 // 1.1 2.2...9.9
std::cout默认情况下,最多输出6位数字,在这种情况下为1(零),因为不需要小数. 例如,std::cout << (double)1.0;会显示1.您可以std::setprecision从<iomanip>标题中使用并std::fixed保留小数.
#include <iostream>
#include <iomanip>
int main(void)
{
int const SIZE = 10;
double number[SIZE] = {0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9};
std::cout << std::setprecision(1) << std::fixed;
for(int i(0) ; i < SIZE ; i++)
{
std::cout << number[i] << std::endl ;
}
}
Run Code Online (Sandbox Code Playgroud)
有很多有用的I/O操纵器. 这是一个检查它的参考.
"0.0"和"0"是相同数字的两个数字.一个double商店只有1号 ; 它不存储原始数字.
当C++程序的源文本包含诸如0.0或的数字时1.1,编译器将其从该数字(字符串)转换为a double.该double格式仅代表数字,而不是他们来自琴弦.因此,零入double仅为零; 它不是"0"或"0.0"或"0.000".打印时,打印的软件double无法知道原始数字是"0"还是"0.0".它只是根据打印规则打印出来double.
默认情况下,double值为零打印为"0".如果您希望以不同方式进行打印,可以使用I/O操纵器来询问其格式是否有所不同.例如,在您之后#include <iomanip>,您可以使用std::cout << std::setprecision(1) << std::fixed;将浮点输出格式设置为固定(与科学)格式的一位数.然后打印double零值将产生"0.0".
1除了零,double可以区分+0和-0(当IEEE 754用于浮点时).