Q: ... 3.55 を 3.6 に、0.0499999 を 0.0 に変換する関数は ...?
A: @Knnnug の回答を使用しますが、小数点以下 1 桁までです。
f = round(f * 10) / 10.0;
3.5
数値が元々3.55f
ではないのでお渡しします。f
確かに、テキスト「3.55」を使用して初期化しましたがC
、コンピューターはその数値を正確に表すことができませんでした。 お使いのシステムには (float) 3.55 はありません。代わりに、最も近い選択肢であるため、f
about の値があります。3.549999952...
3.5 ではなく 3.6 に丸めて表示したい場合は、少し調整する必要があります。値が >= 3.55 である場合( 0.0499999も正確に表現できない場合)、同じナッジがそれを< 0.5 に保つナッジ。f
f
3.549999952...
f
0.04999990016...
f
増加f
して変化を確認できる最小値は ですnextafterf(f, g)
。 g
移動したい値です。
3.549999952... --> 3.550000190...
0.04999990016... --> 0.04999990389...
printf("%.1f\n", nextafterf(f, 2*f));
// prints 3.6 when f is 3.549999952...
// prints 0.0 when f is 0.04999990389...
@Oli Charlesworth の回答の参照を確認することをお勧めします。