1

重複の可能性:
表現の浮動小数点エラー?

このコードに問題があります

int cent;
int dollar ;
float cnt2dlr;
 //convert cnt to doloar ;
cnt2dlr=(cnt)/(100);

問題はいつcnt = 175cnt2dlr = 0.17,444444あり、そうではない0.17,5

何か助けはありますか?

4

3 に答える 3

7

浮動小数点数はしばしば不正確です。それについてあなたができることは何もありません。

あなたのコードは、お金に関する計算に浮動小数点数を使用してはならない理由をよく示しています。通貨の値に小数点があるからといって、お金が浮動小数点数になるわけではありません。浮動小数点数は、温度や速度など、無限に変化する量に使用する必要があります。お金のように、塊で変化する量には使用しないでください。

于 2012-11-07T16:52:37.843 に答える
1

浮動小数点数は正確な表現ではありません。これらは概算であるため、精度を保証することはできません。すべてのコンピューター科学者が浮動小数点演算について知っておくべきことを読む

数値の精度を上げるdoubleには、32 ビットではなく64 ビットを使用することを検討してfloatください。

于 2012-11-07T16:53:25.563 に答える
1

私は少し困惑しています。(cnt) ではなく (cent) を意味する場合は、

cnt2dlr=(cent)/(1000);

(セントの e に注意してください) は int / int 除算であり、175 / 1000 は int 0 を返す必要があります。

実行した場合、同じ結果が得られますか。

cnt2dlr=(cent)/(1000.0);

小数点に注意してください。

于 2012-11-07T17:08:11.830 に答える