-1

我有这个代码:

在 .h 文件中:

@interface ViewController : UIViewController
{
    float costBonus9;
}

在 .m 文件中:

costBonus9 = 123456789;
NSNumber *numbercost9 = [NSNumber numberWithFloat:costBonus9];
NSString *formatcost9 = [formattercost stringFromNumber:numbercost9];
Label9.text = formatcost9;

但 Label9 显示“123456792”。

有什么问题?

4

2 回答 2

2

问题是您使用单精度浮点数,即 afloat来表示 123456789。浮点数将其值存储为有效数(有时称为“尾数”)和指数的组合,与科学记数法不同:

s * 2^e

有效数字的大小决定了您可以如何精确地表示给定值。单精度浮点数有 24 位有效位,因此您得到 24 位有效位。不幸的是,您无法将 123456789 拟合为 24 位,因此您得到了该值的最佳近似值,正如您所发现的那样,它是 123456792。

如果您想要一个精确的值,请使用可以精确存储该值的类型。您可以使用 a double,或者如果您将始终存储整数,那么使用 a 可能会更好long int

于 2013-09-01T03:38:36.830 回答
0

我会使用调试和断点来确保 formatcost9 确实具有您认为的内容。

要在 xcode 中添加断点,请单击将 Navigator(类列表等)与画布(代码显示的位置)分开的灰色条,确保单击要检查的代码行旁边。我会单击numbercost9,然后运行该程序。当它到达断点时,它将暂停。将显示调试菜单,单击指向粗条的向下箭头。这将让您逐行浏览代码。

调试菜单中应该有两个框,一个在右侧(这是您的控制台),一个在左侧,显示变量值。用这个来计算 的值formatcost9

于 2013-09-01T03:35:05.210 回答