Objective c 标签显示不正确的值

Objective c 标签显示不正确的值,objective-c,Objective C,我有以下代码: 在.h文件中: @interface ViewController : UIViewController { float costBonus9; } 在.m文件中: costBonus9 = 123456789; NSNumber *numbercost9 = [NSNumber numberWithFloat:costBonus9]; NSString *formatcost9 = [formattercost stringFromNumber:numbercost9

我有以下代码:

在.h文件中:

@interface ViewController : UIViewController
{
    float costBonus9;
}
在.m文件中:

costBonus9 = 123456789;
NSNumber *numbercost9 = [NSNumber numberWithFloat:costBonus9];
NSString *formatcost9 = [formattercost stringFromNumber:numbercost9];
Label9.text = formatcost9;
但Label9显示“123456792”


有什么问题吗?

我会使用一个调试和一个断点来确保formatcost9真正具有您认为的功能

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


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

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

s * 2^e
有效位的大小决定了表示给定值的精度。单精度浮点有24位有效位,因此得到24位有效位。不幸的是,您无法在24位中拟合123456789,因此您得到了一个确实合适的值,正如您所发现的是123456792


如果需要精确的值,请使用可以精确存储该值的类型。您可以使用
double
,或者如果您总是存储整数,那么最好使用
long int

什么是
formattercost
costBonus9
是浮动的吗?为什么每件事都附加9?你能不能只做
label9.text=@(costBonus9).stringValue
?你认为浮点数中有多少位精度?@HotLicks说了什么
float
s没有足够的精度。这并不能解决真正的问题,即OP试图将27位信息塞进一个24位的包中。