例(C):
#include<stdio.h>
int main()
{
int a, b = 999;
float c = 0.0;
scanf("%d", &a);
c = (float)a/b;
printf("%.3lf...", c);
return 0;
}
998を入れると0.999になりますが、結果は0.998になります。どうやって?
丸めるのではなく切り捨てたいようです。
999/998の数学的な結果は0.9989989989です...小数点以下3桁に丸められます。つまり、 0.999です。したがって、それ%.3f
を印刷するために使用する場合、それが得られるものです。
Cで浮動小数点数を整数に変換すると、小数部分が切り捨てられます。したがって、数値が998.9989989で、それをintに変換すると、998が得られます。したがって、1000を掛け、intに切り捨て、1000で再度除算することにより、必要な結果を得ることができます。
c = c * 1000;
c = (int)c;
c = c / 1000;
または、それをに短縮することができます
c = (int)(c * 1000) / 1000.;
これは、998/999≈0.998などの問題では問題なく機能しますが、タイプfloat
の制限された精度が独自の丸めの問題を導入し始める限界に近づいています。使用double
する方が良い選択です。(タイプfloat
の制限された精度は、ほとんどの場合、問題を引き起こします。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加