float<<通过设置整数部分和浮动部分的精度来进行操作

时间:2011-07-16 20:50:35

标签: c++ string formatting string-formatting stringstream

我想以这样的格式打印浮点数。

01234.56

我使用以下函数将浮点数舍入为n位数。

double round(double val, int precision)
{
    std::stringstream s;
    s << std::setprecision(precision) << std::setiosflags(std::ios_base::fixed) << val;
    s >> val;
    return val;
}

以下行输出任意数字,前导零到固定长度。

setfill ('0') << setw(5) << number

但是当我尝试将两者结合起来时,我最终会得到不一致的长度,如下例所示:

8.2 => 008.2
4.57 => 04.56

我想要的是这样的输出:

8.2 => 08.20
4.57 => 04.57

你能告诉我一个像string myround (double d, intpart n, floatpart f)这样的函数返回:

myround (1234.5, 5, 2) => 01234.50
myround (1234.569, 5, 2) => 01234.57

我想象它之前已被问过,但我找不到使用内部搜索引擎。

1 个答案:

答案 0 :(得分:2)

fixed操纵者会做我认为的伎俩,下面我的例子输出你想要的东西:

#include <iostream>
#include <iomanip>
using namespace std;
int main(void) {
    cout << setprecision(2) << setfill ('0') << setw(5) << fixed << 8.2 << endl;
    cout << setprecision(2) << setfill ('0') << setw(5) << fixed << 4.57 << endl;
}

只需将它放入你的stringstream就可以了。但是,当字符串再次转换为double值时,固定信息将丢失。我认为使用字符串方法对float进行舍入是个不错的主意。