在我的应用程序中,我只是将50除以3我想存储此确切的结果值。 如果我使用float它给出16.666666,如果我使用double,那么它给出16.666667。
实际上,我通过划分框架的高度来在框架内创建三个标签,我决定每个标签的高度。所以我没有得到确切的值它会在labels之间产生差距。如果我通过60然后它工作正常,因为60/3结果20但是如果我通过50然后有一个间隙。
答案 0 :(得分:2)
如果你想让你的框架分成三个相等高度的区域,那么你的框架的高度(以像素为单位)需要被三整除。你不能显示分数像素,它们不可分割;以像素为单位测量的每个高度需要是一个整数。
答案 1 :(得分:1)
存储“精确”值的唯一方法是创建一个名为“Rational”(或类似)的类,并将该分数的分子和分母存储为单独的ivars。 Floats
和doubles
(或任何文字计算机表示)不能存储有无数小数位或超越实数的有理数。
使用“Rational”类的方法是存储分子和分母,然后将适当的数学应用于这些值(如果您希望通过程序传播“精确性”) 。稍微简单一点的方法是将有理数显示为分子和分母,但使用float/double
近似值得基础数学。
答案 2 :(得分:0)
float t= (float)50/3;
long double t1= (long double)50/3;
NSLog(@"%.30f %.30LF",t, t1);
产生输出“16.666666030883789062500000000000 16.666666666666666666088425508008”。
我建议你选择长的双倍,这不是精确但足够精确。