-2

現在、iPhone アプリ用に Objective-C で電卓をコーディングしています。出力浮動小数点数を最も近い 100 分の 1 に丸めようとしています。したがって、1.755 の数値を取得した場合は、1.76 と表示する必要があります。

これに現在使用しているコードは以下のとおりです。

    output.text = [NSString stringWithFormat:@"%.2f", outputVariable];

それで、私の質問は、どうすればこれを 100 分の 1 まで表示し、丸めの一貫性を保つことができるでしょうか? 「%.2f」は、その時点で任意の方向に丸めて表示する傾向があり、それよりももう少し正確さが必要です。

4

1 に答える 1

1

あなたが与えた例、1.755 を考えてみましょう。floatこの値は表現できないため、doubleオブジェクトにこの値を含めることはできません。floatとのdouble型は 2 進浮動小数点を使用するため、すべての値は 2 のべき乗の合計です ( 1/4 や 2 -10などの負のべき乗を含む)。1.755 は有限数の 2 のべき乗の正確な合計ではないため、近似値しかありません。

float f = 1.755;またはを含むソース コードではdouble d = 1.755;、数値「1.755」が表現可能な値に変換されます。このfloat場合、結果は 1.75499999523162841796875 になります。の場合double、結果は 1.75499999999999989341858963598497211933135986328125 です。

これらの値はどちらも 1.755 未満であることに注意してください。したがって、いずれかの値を小数点以下 2 桁に四捨五入すると、結果は「1.75」になります。

1.755 などの値を使用して計算し、それらを正確にしたい場合は、10 進演算を使用するか、浮動小数点演算でのエラーを回避するための他の手順を実行する必要があります (最終出力まで正確に表現できるように値をスケーリングするなど)。 . 具体的なアドバイスは、より大きなアプリケーションによって異なります。

于 2013-05-30T17:44:52.260 に答える