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

Ars*_*mal 1 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");
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

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

Sam*_*all 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操纵器. 这是一个检查它的参考.


Eri*_*hil 5

"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用于浮点时).