double截断为7个字符的输出

时间:2012-06-12 12:43:10

标签: c++

double fat = 0.2654654645486684646846865584656566554566556564654654899866223625564668186456564564664564;
cout<<fat<<endl;

结果:

  

0.265465

它应该是7个字符更长吗?我认为双重可以持有更多?

我也得到了“长双”的相同结果。

5 个答案:

答案 0 :(得分:10)

您只是看到iostream使用的默认精度。

要改进,请使用std::setprecision()

const int max_digits = std::numeric_limits<double>::digits10;

std::cout << std::setprecision(max_digits) << fat << std::endl;

答案 1 :(得分:3)

使用std::setprecision(std::numeric_limits<double>::digits10)获得最高精度

std::cout << std::setprecision(std::numeric_limits<double>::digits10) << fat << std::endl;

答案 2 :(得分:3)

这里有两个问题:

  • 你只得到7个有效数字,因为你的cout流默认精度为7,因为其他答案表明你可以将其增加到std::numeric_limits<double>::digits10

  • double只能存储固定数量的精度,因此分配给fat的大部分数字将被丢弃(在大多数机器上,你将获得最多15位有效数字到双倍)

答案 3 :(得分:0)

问题在于cout,默认为一定数量的小数位。您可以设置cout的精度,然后添加fixed以获得所需的精度

cout.precision(15);
cout << fixed << fat << endl;

答案 4 :(得分:0)

使用cout.precision()
 或者,您也可以使用std::numeric_limits< double >#include <limits>来获得浮点数或双精度的最大精度。
SO post