C++_小数点桁数を指定して、stringに変換

sprintf を使う。 std::stringstream 使うともっと楽。

 

ex )

    double num = 112.14328;
    char str[20];
    std::sprintf(str, "%.2f", num);

コンソールに出力する場合は、
    printf("%.2f", num);

str は、112.14 となる。
num が11.14328 の場合は 11.14 となる。

 

sprintf の引数

int sprintf( char *str, 書式, 変換したい値 );

第一引数
char 型。
フォーマットに変換した文字列を格納

 

第二引数
フォーマット。書式文字列。種類は色々ある。

指定子 %f:
浮動小数点で表示という意味。
使われる方は、float などの浮動小数点型。

 

表示桁数の指定

全体の幅.小数点以下の幅

どちらか片方だけの指定でも良いし、
まったく指定しなくても良い。指定がなければデフォルトが使用される。
小数点以下の幅 は、文字列の場合には最大文字数の意味になる。

 

表示桁数の指定よりも実際の表示文字列が長くなることがある。
これは sprintf( ) の場合に特に注意が必要

文字列の格納域と同じサイズにフォーマットを指定しても、
配列オーバーを引き起こす可能性のあることを意味する。

バッファオーバーラン のこと?
確かに第一引数のサイズを最初に指定するから注意が必要かと。

 

第三引数
変換したい値。複数指定できる。

    double num = 112.14328;
    double numA = 1.14328;
    char str[20];
    std::sprintf(str, "%.2f and %.5f", num, numA);
    //str の中身は「 112.14 and 1.14328 」

※ numA = 1.14; の場合、1.14000 と足りない桁数は 0 埋めになる。

 

こちらから。
https://teratail.com/questions/22355
http://www.k-cube.co.jp/wakaba/server/format.html
http://unageanu.hatenablog.com/entry/20080105/1199528510
https://bituse.info/c_func/40
http://www.aerospace.sd.tmu.ac.jp/hydrodynamics/main/colums/CPP/character_dif.html

 

以上。