2011-07-16 41 views
2

我想用這樣的格式打印浮點數。float <<通過設置整數部分和浮點數部分的精度的操作

.56 

我使用下面的函數將float四捨五入到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) =>.50 
myround (1234.569, 5, 2) =>.57 

我imageine它已被問過,但我找不到它使用內部搜索引擎。

回答

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值時,固定信息將會丟失。我認爲使用字符串方法舍入浮點數並不是一個好主意。

相關問題