2011-09-29 6 views
7
double d = 1/2.; 
printf("%.2lf\n", d); 

これは、0.50を出力します。これはostreamマニピュレータを使用して複製したいものです。しかし、明白なiomanipマニピュレータのどれも、最小の必要小数点を設定することはできません(私が正しく理解していれば、setprecisionは最大幅を設定します)。これを行うには、純粋なiostreamまたはboostの方法がありますか?ostream相当の%.2fまたは%.2lf

答えて

3

setprecisionfixedを組み合わせて使用​​してください。

標準のセクション22.4.2.2.2によると、iostreamの精度仕様は、printfとまったく同じです。 fixedは、printf%fとまったく同じ動作を示します。

+0

リンクできますか? –

+0

@FooBah:http://stackoverflow.com/questions/81656/where-do-i-find-the-current-c-or-c-standard-documentsを参照してください。 –

10

あなたはiomanipヘッダからstd::fixedstd::setprecisionを使用することができる:所望のよう

#include <iostream> 
#include <iomanip> 
int main(void) { 
    double d = 1/2.; 
    std::cout << std::fixed << std::setprecision(2) << d << std::endl; 
    return 0; 
} 

これは0.50出力します。

1
+2

うわー、これは蚊を殺すのと同じです熱核弾頭:-) – paxdiablo

+0

@paxdiable:いいえ、それは本当の問題を解決します。 'printf'は型安全ではなく、いくつかの型で動作します。ストリームの書式設定は苦痛です(場合によっては書式文字列を使用する必要があります)。 – visitor

関連する問題