用cout打印正确的小数点数

时间:2011-05-06 05:12:27

标签: c++

我有一个float值的列表,我想用cout打印它们,小数点后2位。

例如:

10.900  should be printed as 10.90
1.000 should be printed as 1.00
122.345 should be printed as 122.34

我该怎么做?

setprecision似乎没有帮助。)

13 个答案:

答案 0 :(得分:144)

使用<iomanip>,您可以使用std::fixedstd::setprecision

这是一个例子

#include <iostream>
#include <iomanip>

int main()
{
    double d = 122.345;

    std::cout << std::fixed;
    std::cout << std::setprecision(2);
    std::cout << d;
}

你会得到输出

122.34

答案 1 :(得分:35)

你几乎就在那里,需要使用std :: fixed,请参考http://www.cplusplus.com/reference/iostream/manipulators/fixed/

#include <iostream>
#include <iomanip>

int main(int argc, char** argv)
{
    float testme[] = { 0.12345, 1.2345, 12.345, 123.45, 1234.5, 12345 };

    std::cout << std::setprecision(2) << std::fixed;

    for(int i = 0; i < 6; ++i)
    {
        std::cout << testme[i] << std::endl;
    }

    return 0;
}

输出:

0.12
1.23
12.35
123.45
1234.50
12345.00

答案 2 :(得分:15)

setprecision(n)适用于整个数字,而不是小数部分。您需要使用定点格式使其适用于小数部分:setiosflags(ios::fixed)

答案 3 :(得分:7)

简化已接受的答案

简化示例:

#include <iostream>
#include <iomanip>

int main()
{
    double d = 122.345;
    std::cout << std::fixed << std::setprecision(2) << d;
}

你会得到输出

122.34

参考:

答案 4 :(得分:4)

我有一个整数问题,同时想要一致的格式化。

重写完整性:

#include <iostream>
#include <iomanip>

int main()
{
    //    floating point formatting example

    double d = 122.345;
    cout << std::fixed << std::setprecision(2) << d << endl;
    //    Output:  122.34


    //    integer formatting example

    int i = 122;
    cout << std::fixed << std::setprecision(2) << double(i) << endl;
    //    Output:  122.00
}

答案 5 :(得分:2)

您必须将“浮动模式”设置为固定。

float num = 15.839;

// this will output 15.84
std::cout << std::fixed << "num = " << std::setprecision(2) << num << std::endl;

答案 6 :(得分:2)

我在编码竞赛中遇到了类似的问题,这就是我处理它的方式。 将精度设置为2到所有双精度值

首先添加标题以使用setprecision

#include <iomanip>

然后在我们的主要

中添加以下代码
  double answer=5.9999;
  double answer2=5.0000;
  cout<<setprecision(2)<<fixed;
  cout <<answer << endl;
  cout <<answer2 << endl;

输出:

5.99
5.00

你需要使用fixed来写5.00这就是为什么,你的输出不会是5.00。

A short reference video link I'm adding which is helpful

答案 7 :(得分:1)

要在小数点后设置固定的2位数,请先使用这些数字:

cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);

然后打印您的双倍值。

这是一个例子:

#include <iostream>
using std::cout;
using std::ios;
using std::endl;

int main(int argc, char *argv[]) {
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    double d = 10.90;
    cout << d << endl;
    return 0;
}

答案 8 :(得分:0)

#include<stdio.h>
int main()

{

 double d=15.6464545347;

printf("%0.2lf",d);

}

答案 9 :(得分:0)

带有模板

import getpass
path = f'C:\\Users\\{getpass.getuser()}\\Desktop\\'

与科学类似,也具有宽度选项(对列有用)

#include <iostream>

// d = decimal places
template<int d> 
std::ostream& fixed(std::ostream& os){
    os.setf(std::ios_base::fixed, std::ios_base::floatfield); 
    os.precision(d); 
    return os; 
}

int main(){
    double d = 122.345;
    std::cout << fixed<2> << d;
}

答案 10 :(得分:0)

results = service.users().list( customer='my_customer',
                                query='externalId:someValue',
                                orderBy='email'
                                ).execute()
users = results.get('users', [])

简单的代码肯定能帮到你!

答案 11 :(得分:-1)

只是一个小问题;将以下内容放在标题

使用namespace std;

然后

std :: cout&lt;&lt; std :: fixed&lt;&lt; std :: setprecision(2)&lt;&lt; d;

变得简化为

cout&lt;&lt;固定&lt;&lt; setprecision(2)&lt;&lt; d;

答案 12 :(得分:-3)

这是一个使用矩阵的例子。

cout<<setprecision(4)<<fixed<<m[i][j]