如何使“std::cout << 123456789.12”输出“123456789.12”?

6

我该如何制作

std::cout << 123456789.12

打印这个:

123456789.12

它总是打印这个:
1.23457e+008

我知道我必须使用标志来操作,但我无法确定正确的组合。如果我设置了fixed标志,它会打印

123456789.120000

2
std::setprecision:http://en.cppreference.com/w/cpp/io/manip/setprecision - willll
新的 CPP 程序员,你为什么要添加 STL 标志?无论如何,你可以通过 std::setprecision(int) 来设置精度。尝试一下 std::cout << std::setprecission(20) << 123456789.12 << endl; - DOOM
你希望一般情况下看到什么?固定的符号和小数点后两位?总共11位数字? - tgmath
1
呵呵。一个聪明的回答是将数字放在引号中: std::cout <<“123456789.12”; - Adrian McCarthy
我只想让尾随的零消失。但我希望它显示所有必要的数字。因此,如果小数点后有三个数字,我希望它把它们都显示出来。 - Christian
显示剩余2条评论
3个回答

11

如何...

一种方法:-

#include <iostream>
#include <iomanip>

int main() {
    double f =123456789.12;
    std::cout << std::fixed << std::setprecision(2) << f << '\n';
    return 0;
}

请查看这里

请寻找合适的参考资料


1

您可以使用:

#include <iostream>
#include <limits>
using namespace std;

int main() {
    double c = 123456789.12;
    cout.precision(numeric_limits<double>::digits10 + 1);
    cout << c << endl;

    return 0;
}

基本上,limits对于所有内置类型都有特征。浮点数(float/double/long double)之一的特征是digits10属性。这定义了浮点数在十进制下的精度。
查看实例:http://ideone.com/Ity9m7

要继续阅读,请查看另一个类似的问题:如何使用cout打印具有完全精度的double值?


2
注意,从 +1 得到的最后一位数字不应被视为有用信息,除了能够精确地序列化和恢复该值。 - Potatoswatter

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接