私のアプリケーションでは、50 を 3 で割るだけです。これの正確な結果値を保存したいと思います。float を使用すると 16.666666 になり、double を使用すると 16.666667 になります。
実は、枠の高さを分割して枠内に3枚のラベルを作成しており、それぞれのラベルの高さを決めています。したがって、正確な値が得られず、ラベル間にギャップが生じます.60を渡すと、60/3の結果が20になるため正常に機能しますが、50を渡すとギャップがあります。
私のアプリケーションでは、50 を 3 で割るだけです。これの正確な結果値を保存したいと思います。float を使用すると 16.666666 になり、double を使用すると 16.666667 になります。
実は、枠の高さを分割して枠内に3枚のラベルを作成しており、それぞれのラベルの高さを決めています。したがって、正確な値が得られず、ラベル間にギャップが生じます.60を渡すと、60/3の結果が20になるため正常に機能しますが、50を渡すとギャップがあります。
フレームを 3 つの等しい高さの領域に分割する場合、フレームの高さ (ピクセル単位) は 3 で割り切れる必要があります。分数ピクセルは表示できません。割り切れません。ピクセル単位で測定された各高さは整数である必要があります。
「正確な」値を格納する唯一の方法は、「Rational」(または類似のクラス) と呼ばれるクラスを作成し、分数の分子と分母を個別の ivar として格納することです。Floats
そしてdoubles
(またはそのことについての文字通りのコンピュータ表現)は、無限の小数点以下桁数または超越実数を持つ有理数を格納できません。
「Rational」クラスを使用する方法は、分子と分母を格納し、これらの値に適切な数学を適用することです (プログラムを通じて「正確さ」を伝達したい場合)。少し簡単な方法は、有理数を分子と分母として表示float/double
し、基礎となる数学の近似を使用することです。
float t= (float)50/3;
long double t1= (long double)50/3;
NSLog(@"%.30f %.30LF",t, t1);
生成された出力「16.666666030883789062500000000000 16.66666666666666666088425508008」。
正確ではありませんが十分に正確な long double を使用することをお勧めします。