C++ 为什么输出显示0而不是0.0?
我声明了一个包含10个元素的数组,并用0.0初始化它。。9.9,它的输出是完美的,只是0.0变成了0,为什么呢C++ 为什么输出显示0而不是0.0?,c++,arrays,types,C++,Arrays,Types,我声明了一个包含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++) {
#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");
}
#包括
使用名称空间std;
内部主(空)
{
int const SIZE=10;
双数[大小]={0.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9};
for(int i(0);i cout“0.0”和“0”是同一数字的两个数字。double
只存储数字1;不存储原始数字
当C++程序的源代码包含一个数字,如<代码> 0 < /COD>或<代码> 1.1 > />代码,编译器将它从该数字(这是一个字符串)转换过来。到double
。double
格式只表示数字,而不表示它们来自的字符串。因此,double
中的零只是零;它不是“0”或“0.0”或“0.000”。打印它时,打印double
的软件无法知道原始数字是“0”还是“0”“0.0”。它只是根据打印double
的规则进行打印
默认情况下,零的双精度值打印为“0”。如果希望以不同的方式打印,可以使用I/O操纵器要求以不同的格式打印。例如,在#include
之后,可以使用std::cout“0.0”和“0”是同一个数字的两个数字。double
只存储数字1;不存储原始数字
当C++程序的源代码包含一个数字,如<代码> 0 < /COD>或<代码> 1.1 > />代码,编译器将它从该数字(这是一个字符串)转换过来。到double
。double
格式只表示数字,而不表示它们来自的字符串。因此,double
中的零只是零;它不是“0”或“0.0”或“0.000”。打印它时,打印double
的软件无法知道原始数字是“0”还是“0”“0.0”。它只是根据打印double
的规则进行打印
默认情况下,零的double
值打印为“0”。如果希望以不同的方式打印,可以使用I/O操纵器要求以不同的格式打印。例如,在#include
之后,如果确实需要输出0.0而不是0,可以使用std::cout,查看#include
如果确实需要输出0.0而不是0,请查看#includede
std::cout
默认情况下最多输出6位数字,在本例中为1(零),因为不需要小数。std::coutstd::cout
默认情况下最多输出6位数字,在本例中为1(零)因为不需要小数。std::cout在大多数情况下,标准格式将使用尽可能紧凑的表示形式。由于二进制浮点数是标准化的,因此它们不表示任何尾随数字。如果您希望有一个额外的小数位置,您可能需要使用以下标志:
std::cout << std::fixed << std::setprecision(1);
std::cout在大多数情况下,标准格式将使用尽可能紧凑的表示形式。由于二进制浮点数是标准化的,因此它们不表示任何尾随数字。如果您希望有额外的小数位置,可能需要使用以下标志:
std::cout << std::fixed << std::setprecision(1);
std::cout这就是默认情况下cout
的工作方式。要更改这一点,您可以:
使用precision()
方法:
cout.precision(1);
for(int i(0) ; i < SIZE ; i++)
{
cout << number[i] << endl ;
}
这就是默认情况下cout
的工作方式。要更改这一点,您可以:
使用precision()
方法:
cout.precision(1);
for(int i(0) ; i < SIZE ; i++)
{
cout << number[i] << endl ;
}
在cout
或另一个流中插入double
的默认值是不显示数字所需的数字。默认值是C的%g
格式,它使用六位数字,但删除尾随零(四舍五入到六位后)。该SetPerVision函数有助于处理1.1到9.9的输出,但问题仍然是0仍然是零,即使我将第0个元素初始化为0.0!!@ArsalaKamal确保您也使用fixed
。setprecision
设置最大位数舍入,fixed
使其始终显示小数位数。请仔细阅读我的答案,并检查末尾的参考I链接。我已确认我端的输出显示0.0
在cout
或其他流中插入double
的默认值是显示数字所需的位数。默认值为C%g
格式,使用六位数,但删除尾随零(四舍五入到六位数后)。该SetPerVision函数有助于处理1.1到9.9的输出,但问题仍然是0仍然是零,即使我将第0个元素初始化为0.0!!@ArsalaKamal确保您也使用fixed
。setprecision
设置最大位数舍入,fixed
使其始终显示小数位数。请仔细阅读我的答案,并检查结尾处的参考链接。我已确认我端的输出显示0.0
,setpervision函数有助于操纵1.1到9.9的输出,但问题仍然存在0,即使我将第0个元素初始化为0.0!!确实存在将double初始化为0或0.0或0.00等没有区别。为了使用setprecision
,您必须将#include
与其他include
语句一起使用。否则,使用cout.precision
,如Remy所示。该setpervision函数有助于处理1.1到9的输出。9但问题仍然存在0仍然是零,即使我将第0个元素初始化为0.0!!第0个
#include <iomanip>
cout << setprecision(1) << fixed;
for(int i(0) ; i < SIZE ; i++)
{
cout << number[i] << endl ;
}