3-8. 精度
◆精度
次は精度の設定です。ここでは、精度の意味について少し述べます。
たとえば、
3.1415926535
という数があります。(…て円周率じゃん!)
しかし、ここまで表示する必要がないので小数点以下第2までにします。
このときに精度を2と設定してあげると、(%fの場合)
3.14
になります。
◆整数型の場合
まず、整数型の精度のデフォルトは1です。整数型の場合表示する桁数の最小を設定します。なのでデフォルトの1の場合最低1桁の表示がなされるということになります。(0でも0と表示されるわけ)
1230
230
30
0
つまり精度を0にすると、数値が0のとき表示されなくなってしまいます。
1230
230
30
逆に精度を大きくしたときは余った桁を0で埋めます。
(精度4の時)
1230
0230
0030
0000
printf()での設定はどうなるかというと、
% のあと.(数字)で設定します。
もちろんフィールド幅と併用できます。
#include<stdio.h> main() { printf("%.3d\n",12); /* 精度3 */ printf("%1.3d\n",23); /* フィールド幅の併用可 */ printf("%.0d\n",0); /* 精度0で値0だと表示されない */ }
結果:
012
023
となりました。
◆実数型の場合
◇f,e,E
精度と言うには実数型の場合が一番ふさわしいと思います。
No.033に出てきた円周率の例を使ってやってみようと思います。
円周率=3.1415926535…
これを精度を指定しないままで表示すると
#include<stdio.h> main() { printf("%f\n",3.1415926535); printf("%e\n",3.1415926535); }
結果:
3.141593
3.141593e+000
と表示されます。
ここでの精度は小数点以下の桁数の指定になります。
そして、デフォルトは6であり、それ以下は四捨五入されます。
今度は円周率を100倍して表示してみました。
#include<stdio.h> main() { printf("%f\n",3.1415926535*100); printf("%e\n",3.1415926535*100); }
結果:
314.159265
3.141593e+002
あくまで、小数点以下第6位までの表示になっています。
それでは、このデフォルトの値を変えて0にしたらどうでしょうか?
#include<stdio.h> main() { printf("%.0f\n",3.1415926535); printf("%.0e\n",3.1415926535); }
結果:
3
3e+000
となり、小数点まで省略されてしまいました。
◇g,G
g、Gの場合の精度は有効桁数になります。
#include<stdio.h> main() { printf("%g.3\n",1.2345); printf("%g.3\n",0.12345); printf("%g.3\n",0.0000012345); }
結果:
1.23
0.123
1.23e-006
どれも有効数字3桁になっています。
◇s
文字列の場合は出力する最大文字数になります
#include<stdio.h> main() { printf("%.10s\n","文字列の場合は"); }
結果:
文字列の場
となります。
◇アスタリスクを使う
精度でもアスタリスクが使えます。
#include<stdio.h> main() { printf("%.*s\n",10,"文字列の場合は"); }
結果:
文字列の場
このようにアスタリスクに対応する整数型のデータを精度として扱います。
フィールド幅との併用もできます。
#include<stdio.h> main() { printf("%*.*s\n",15,10,"文字列の場合は"); }
結果:
文字列の場
ここでは15がフィールド幅10が精度として対応しています。