sprintf
次のようなものを使用して、文字列に double 値を設定しようとしています。
sprintf(S, "%f", val);
しかし、精度は小数点以下 6 桁に切り捨てられています。精度には小数点以下約 10 桁が必要です。
それはどのように達成できますか?
sprintf
次のようなものを使用して、文字列に double 値を設定しようとしています。
sprintf(S, "%f", val);
しかし、精度は小数点以下 6 桁に切り捨てられています。精度には小数点以下約 10 桁が必要です。
それはどのように達成できますか?
%[幅]。[精度]
幅には小数点を含める必要があります。
%8.2は8文字幅を意味します。ポイントの前に5桁、ポイントの後に2桁。ポイント用に1文字予約されています。
5 + 1 + 2 = 8
必要なのは修飾子です。
sprintf(S, "%.10f", val);
man sprintfには、フォーマット指定子に関するより多くの詳細があります。
より完全なリファレンスについては、ウィキペディアのprintfの記事、「printf形式のプレースホルダー」のセクション、および同じページの良い例を参照してください。
注意してください-sprintfの出力はCロケールによって異なります。これはあなたが望むものかもしれないし、そうでないかもしれません。ロケールのドキュメント/マニュアルページでLC_NUMERICを参照してください。
%f
float 値用です。
%lf
代わりに使用してみてください。これは、ダブル (以前はロング フロートと呼ばれていた) 用に設計されています。
ダブル x = 3.14159265 ;
printf("15.10lf\n", x);