1

我声明了一个包含 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");
}

谢谢,

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

4

5 回答 5

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 操纵器。 这是检查它的参考。

于 2013-09-27T15:02:45.963 回答
6

“0.0”和“0”是同一个数字的两个数字。Adouble只存储数字1;它不存储原始数字。

当 C++ 程序的源文本包含诸如0.0or1.1之类的数字时,编译器会将其从该数字(即字符串)转换为double. 该double格式仅代表数字,而不是它们来自的字符串。所以,一个零double就是零;它不是“0”或“0.0”或“0.000”。打印时,打印 a 的软件double无法知道原始数字是“0”还是“0.0”。它只是根据打印规则打印它double

默认情况下,double零值打印为“0”。如果您希望它以不同的方式打印,您可以使用 I/O 操纵器来要求它以不同的方式格式化。例如,在 you 之后#include <iomanip>,您可以使用std::cout << std::setprecision(1) << std::fixed;将浮点输出格式设置为固定(相对于科学)格式的一位数。然后打印double零值将产生“0.0”。


1除零外,double可区分 +0 和 –0(当 IEEE 754 用于浮点时)。

于 2013-09-27T14:58:41.933 回答
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 ;
    }
    
于 2013-09-27T15:08:29.970 回答
1

如果您确实需要输出 0.0 而不是 0,请查看#include <iomanip>

于 2013-09-27T14:59:46.990 回答
1

在大多数情况下,正常格式将使用尽可能紧凑的表示。由于二进制浮点数已标准化,因此它们不代表任何尾随数字。如果你想要一个额外的小数位置,你可能想要使用这些标志:

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();
}
于 2013-09-27T15:03:25.840 回答