2017-01-26 7 views
-1

私はSTRING、DOUBLEデータを含む5行を読んでいます。 私は文字列を読んでから、カンマである最後の文字を削除してから、ダブルを読んでいます。以下の試験データからの読み取り時(はifstream変数である)で間違ったダブルデータの読み込みを防止する方法C++

in >> format >> number; 
format.erase(format.length() - 1); 

しかし、第4の数は、(デバッグおよび印刷に示すように)23.489999999999998として読み出されます。どうすればこれを防ぐことができますか?

&&&&&&, 456 
&&&&&&,&, 1000000 
$&&&&.&&, 123.38 
&&&.&&&, 23.49 
&&&.&&&, 23.4999 
&&&E, 45 
+0

これは間違った読書ではありません。それは正しい読書であり、後でそれを間違って印刷する可能性があります。 (正確な印刷ですが、あなたが望むものではないようですが、浮動小数点値*を正確に表示するには、文字列を使用する必要があります。 – BoBTFish

+2

これは "間違っていません"。 –

+0

デバッグと印刷に使用しているコードを表示します。何が入力であるかを指定し、あなたの望む出力は何ですか? – Rama

答えて

1

浮動小数点値には無限の前兆がありません。これらは近似値です。

あなたの値はちょうどよく読み取られ、doubleに格納できる最も近い可能な近似値に変換されています。

What Every Computer Scientist Should Know About Floating-Point Arithmeticと読んでください。

+0

結論として:C++を使用せず、浮動小数点を使用せず、C#の10進数を使用してください。 –

関連する問題