我声明了一个包含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");
}
谢谢,
输出: 0 //它应该是0.0而不是0 // 1.1 2.2 。 。 。 9.9
答案 0 :(得分: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 ;
}
}
有很多有用的I / O操纵器。 Here's a reference to check it out.
答案 1 :(得分:5)
“0.0”和“0”是相同数字的两个数字。 double
仅存储数字 1 ;它不存储原始数字。
当C ++程序的源文本包含0.0
或1.1
等数字时,编译器会将其从该数字(字符串)转换为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用于浮点时)。
答案 2 :(得分:4)
这就是cout
默认情况下的工作原理。要更改它,您可以:
使用precision()
方法:
cout.precision(1);
for(int i(0) ; i < SIZE ; i++)
{
cout << number[i] << endl ;
}
使用setprecision()
:
#include <iomanip>
cout << setprecision(1) << fixed;
for(int i(0) ; i < SIZE ; i++)
{
cout << number[i] << endl ;
}
答案 3 :(得分:1)
如果您确实需要输出0.0而不是0,请查看#include <iomanip>
答案 4 :(得分:0)
在大多数情况下,普通格式将尽可能使用紧凑的表示。由于二进制浮点数是标准化的,因此它们不代表任何尾随数字。如果你想要一个额外的小数位置,你可能想要使用这些标志:
std::cout << std::fixed << std::setprecision(1);
整个程序看起来像这样:
#include <iomanip>
#include <iostream>
int main()
{
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::fixed << std::setprecision(1);
for(int i(0) ; i != SIZE ; ++i)
{
std::cout << number[i] << '\n';
}
std::cin.ignore();
}