为什么输出显示0而不是0.0?

时间:2013-09-27 14:57:11

标签: 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++)
{
        cout << number[i] << endl ;
}
system("PAUSE");
}

谢谢,

输出: 0 //它应该是0.0而不是0 // 1.1 2.2 。 。 。 9.9

5 个答案:

答案 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.01.1等数字时,编译器会将其从该数字(字符串)转换为doubledouble格式仅代表数字,而不代表它们来自的字符串。因此,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默认情况下的工作原理。要更改它,您可以:

  1. 使用precision()方法:

    cout.precision(1);
    for(int i(0) ; i < SIZE ; i++)
    {
        cout << number[i] << endl ;
    }
    
  2. 使用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();
}