繁体   English   中英

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

[英]c++ cout << [double] not printing decimal places

我有一个简单的C ++程序,我认为会打印出f和g中定义的double值作为double ...但是C ++将它们打印为整数。 我检查了cout的默认精度,当我运行它时,输出显示默认精度应为6,所以我很困惑为什么双打不正确。

#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;

}

我看到的输出是:

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位小数?

如果我做

std::cout << std::fixed << f

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

只是想知道是否有人可以向我解释这种行为? 这是预期的吗? 我是否希望使用std :: fixed来强制打印双打?

这是因为默认表示法和固定表示法之间的区别。

根据文件

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

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

有三个浮点表示法:

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

知道,正如cplusplus.com文档引用的那样,这也很有趣:

可以通过调用str来选择默认表示法。 unsetfios_base :: floatfield )。


PS:对于C ++ 11有新的符号: hexfloat十六进制和defaultfloat为之前所谓的(无)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM