标签显示不正确的值

时间:2013-09-01 01:31:53

标签: objective-c

我有这段代码:

在.h文件中:

@interface ViewController : UIViewController
{
    float costBonus9;
}

在.m文件中:

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

但Label9显示“123456792”。

有什么问题?

2 个答案:

答案 0 :(得分:2)

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

s * 2^e

有效数字的大小决定了您可以精确地表示给定值。单个精度浮点数具有24位有效位数,因此您可以得到24个有效位。不幸的是,你不能以24位的形式输入123456789,所以你得到的the best approximation值恰好适合你,你发现它是123456792。

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

答案 1 :(得分:0)

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

要在xcode中添加断点,请单击从画布(代码所示的位置)分隔导航器(类列表等)的灰色栏,确保单击要检查的代码行旁边的。我会点击numbercost9,然后运行程序。当它到达断点时它会暂停。将显示调试菜单,单击指向厚条的箭头。这将逐行引导您完成代码。

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