- ベストアンサー
浮動小数点数の整数部を0にして印字したい。
タイトルの通りなのですが 例えば、 float x; x = 3.0; print("%E",x); といった場合印字されるのは 3.000000E+00 のはずですが、訳あって以下のように印字させたいのです。 0.300000E+01 どのようにすればよろしいでしょうか? 誰かお詳しい方お願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなが選んだベストアンサー
どうしてもそのように出力させたいのであれば、自分で3.000000E+00という出力文字列を整形して、0.300000E+01にしてやればよいですね。文字列の操作は普通の人であればできるでしょう。
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
ecvt関数が使えるのであれば、それを使うのが一番簡単かと思います。
- ICE_FALCON
- ベストアンサー率56% (63/111)
あんまり確認してないけど、 これでどうかな? float offset; char str[STR_MAX], *s; offset = pow(10., (int)log10( fabs(x) ) + 1 ); if(x < 0.){ x -= offset; }else{ x += offset; } sprintf(str,"%E",x); s = strchr(str,'1'); *s = '0'; printf("%s",str); ・・・10進数で計算するとどうしても誤差出るな。。。 できるかどうか微妙・・・。 他の方法としては・・・・。 最初にsprintfしといて、 指数部をstrrchr(..,'E') とかで取得、 atoiで値を+1 memmoveとかで可数部ずらして、 とかしたら誤差なくできると思うけど、 考えるのめんどうですな・・。
お礼
わざわざプログラムを作って頂きありがとうございます。 一番小さい桁を切り捨てるか、四捨五入するかで 話が変わってきますね。 やはりめんどうですね・・・。 けど、せっかく作っていただいたので 参考にさせていただきます。ありがとうございました!!
お礼
やはりそれしかないですか。 もしかしたら、そういう表示形式があるのかな と思ったのですが、、、、 ありがとうございます。