0

在我的应用程序中,我只是将 50 除以 3,我想存储它的确切结果值。如果我使用 float 它给出 16.666666,如果我使用 double 那么它给出 16.666667。

实际上,我通过划分框架的高度在一个框架内创建三个标签,我决定每个标签的高度。所以我没有得到确切的值,它会在标签之间产生间隙。如果我通过 60,那么它工作正常,因为 60/3 结果为 20,但如果我通过 50,则存在间隙。

4

3 回答 3

2

如果你想让你的框架分成三个等高的区域,那么你的框架的高度(以像素为单位)需要被三整除。您不能显示小数像素,它们不可分割;每个以像素为单位的高度都需要是一个整数。

于 2013-02-27T05:54:59.030 回答
1

存储“精确”值的唯一方法是创建一个名为“Rational”(或类似)的类,并将分数的分子和分母存储为单独的 ivars。Floatsdoubles(或任何文字的计算机表示)不能存储具有无限个小数位的有理数或超越实数。

使用“Rational”类的方法是存储分子和分母,然后将适当的数学应用于这些值(如果您希望通过程序传播“精确性”)。稍微简单的方法是将有理数显示为分子和分母,但使用float/double基础数学的近似值。

于 2013-02-27T05:49:00.553 回答
0
float t= (float)50/3;
long double t1= (long double)50/3;

NSLog(@"%.30f     %.30LF",t, t1);

产生输出“16.666666030883789062500000000000 16.666666666666666666088425508008”。

我建议您使用不精确但足够精确的 long double。

于 2013-02-27T06:08:58.527 回答