首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++ cout << [double]不打印小数位

c++ cout << [double]不打印小数位
EN

Stack Overflow用户
提问于 2013-11-22 10:30:04
回答 2查看 21.2K关注 0票数 16

我有一个简单的C++程序,我想它会打印出一个在f和g中定义的双精度值作为双精度。但C++将它们打印成整数。我检查了cout的默认精度,当我运行它时,输出表明默认精度应该是6,所以我搞不懂为什么double不能正确打印。

代码语言:javascript
复制
#include <iostream>
#include <stdio.h>
int main() {

    double f = 735416.416898;
    double g = f + 0.3;

    std::cout << "default precision is " << std::cout.precision() << std::endl;

    std::cout << "[c++] f = " << f << std::endl;
    std::cout << "[c++] g = " << g << std::endl;
    printf("[c] f = %f\n", f);
    printf("[c] g = %f\n", g);

    f = 735416.516898;
    g = f + 0.3;

    std::cout << "[c++] f = " << f << std::endl;
    std::cout << "[c++] g = " << g << std::endl;
    printf("[c] f = %f\n", f);
    printf("[c] g = %f\n", g);

    return 0;

}

我看到的输出是:

代码语言:javascript
复制
kiran@kiran-VirtualBox:~/test$ g++ -o test test.cpp 
kiran@kiran-VirtualBox:~/test$ ./test 
[c++] f = 735416
[c++] g = 735417
[c] f = 735416.416898
[c] g = 735416.716898
[c++] f = 735417
[c++] g = 735417
[c] f = 735416.516898
[c] g = 735416.816898

因为默认精度显示为6,所以cout不也应该显示小数点后6位吗?

如果我这样做了

代码语言:javascript
复制
std::cout << std::fixed << f

它可以正确打印(所有小数位)。

不知道有没有人能给我解释一下这种行为?这是意料之中的吗?我是否应该使用std::fixed来正确地强制打印双精度值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-22 10:42:19

这是因为默认表示法和固定表示法之间存在差异。

根据documentation的说法,

  • 使用默认的浮点表示法,精度字段指定要在总中显示的最大有意义位数,包括小数点之前和之后的位数。请注意,它不是最小值,因此,如果显示的数字可以用小于精度的位数显示,则它不会用尾随零填充显示的数字。
  • 在固定记数法和科学记数法中,精度字段指定在小数点之后显示的确切位数,即使这包括尾随的小数零。在这种情况下,小数点前的数字与精度无关(已添加强调)。

流使用默认的浮点表示法,直到(或除非)您将其切换为固定或科学表示法。由于您的数字在小数点前有6位数字,并且默认精度也设置为6,因此浮点数字看起来像整数。

票数 10
EN

Stack Overflow用户

发布于 2013-11-22 10:49:31

有三种浮点表示法:

用于定点科学notation.

  • std::scientific
  • std::fixed notation.
  • (none)默认表示法。

默认表示法只使用精度值来计算数字的所有位数,而不仅仅是小数部分。如果您使用一个短数字(如3.1415),您可以看到该数字显示正确。

同样有趣的是,正如cplusplus.com documentation所引用的那样:

可以通过调用str.unsetf(ios_base::floatfield)来选择默认表示法。

附言:对于C++11,有了新的符号:hexfloat代表十六进制,defaultfloat代表之前的所谓(无)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20135901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档