質問

これはコーディングの習慣です。これらの番号をファイルからdoubleとして読み取ります:
112233 445566
8717829120000 2.4
16000000 1307674.368
10000 2092278988.8
1234567 890123
いくつかの計算の後、それらのいくつかを出力する必要があります。それらをファイルと同じように表示したい、ゼロを埋める、科学表記法がない、どうすればそれを達成できますか?文字列として読み込んで変換する必要がありますか?

編集:えーと...プログラムが数値が元々どのように見えるかを実際に知る方法がないということですか?

役に立ちましたか?

解決

出力を入力と同一にする場合は、はい、文字列として読み込み、後で出力する文字列を保存する必要があります。

なぜですか?浮動小数点数を扱う場合、コンピューターはほとんどの小数部を正確に2進数で表現できません。したがって、2.4のような数値では、内部表現は正確に2.4ではなく、わずかに異なります。ほとんどの場合、C / C ++ I / Oライブラリはこのような2進数を使用して2.4を出力しますが、一部の数値では2.40000000001または2.399999999のように出力される場合があります。

だから、元の文字列を保持したいのです。

他のヒント

これを行うための組み込みの方法はありません。はい、元の表現と、その表現と解析された数値(たとえばmap<string, double>)の間のリンクを保持する必要があります。

元の数字をそのまま出力する必要がある場合は、元の文字列をどこかに保存した方がよい場合があります。小数点の間に-<!> gt;バイナリ-<!> gt; 10進変換では、倍精度の制限により、一部の精度が失われる場合があります。最終的にまったく同じ10進数を印刷することはできません。

それらを文字列として読み取り、多くの細かい部分(小数部分、長さ、パディングゼロなど)をすべて記録し、各フィールドのすべての側面を覚えて、絶対に必要な場合は数値に変換します、その後、出力用に数字をフォーマットするときに保存したすべてのクレイジーな小さなアスペクトを使用します。クレイジーですが、あなたが求めているものを文字通り達成する唯一の方法です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top