我有这段代码:
在.h文件中:
@interface ViewController : UIViewController
{
float costBonus9;
}
在.m文件中:
costBonus9 = 123456789;
NSNumber *numbercost9 = [NSNumber numberWithFloat:costBonus9];
NSString *formatcost9 = [formattercost stringFromNumber:numbercost9];
Label9.text = formatcost9;
但Label9显示“123456792”。
有什么问题?
答案 0 :(得分:2)
问题在于您使用单精度浮点数(即float
)来表示123456789.浮点数将其值存储为有效数字的组合(有时称为“尾数”)和指数,与科学记数法不同:
s * 2^e
有效数字的大小决定了您可以精确地表示给定值。单个精度浮点数具有24位有效位数,因此您可以得到24个有效位。不幸的是,你不能以24位的形式输入123456789,所以你得到的the best approximation值恰好适合你,你发现它是123456792。
如果需要精确值,请使用可以精确存储值的类型。您可以使用double
,或者如果您始终存储整数,那么使用long int
可能会更好。
答案 1 :(得分:0)
我会使用调试和断点来确保formatcost9确实具有您认为的功能。
要在xcode中添加断点,请单击从画布(代码所示的位置)分隔导航器(类列表等)的灰色栏,确保单击要检查的代码行旁边的。我会点击numbercost9
,然后运行程序。当它到达断点时它会暂停。将显示调试菜单,单击指向厚条的箭头。这将逐行引导您完成代码。
调试菜单中应该有两个框,一个在右边(这是你的控制台),另一个在左边,显示变量值。使用这个来计算formatcost9
的价值。