Objective c 一系列的数字被传递到一个标签上,产生了奇怪的结果

Objective c 一系列的数字被传递到一个标签上,产生了奇怪的结果,objective-c,Objective C,我有两个按钮,每个按钮都有一个标签号,我将其传递到这个字符串中,我只是尝试键入1,1,1,1,1,1,1或2,2,2,2,2,2或偶数,1,2,2,1,1 在第8次或第9次按下按钮“1”之前,一切正常,标签上写着11111111 2。然后,如果我再按一次1,标签上写着111111168 也许我完全错了?在我的头脑中是有道理的,但现在我只是感到困惑。任何帮助都将是惊人的,谢谢 -(IBAction)buttonDigitPressed:(id)sender { currentNumber

我有两个按钮,每个按钮都有一个标签号,我将其传递到这个字符串中,我只是尝试键入1,1,1,1,1,1,1或2,2,2,2,2,2或偶数,1,2,2,1,1

在第8次或第9次按下按钮“1”之前,一切正常,标签上写着11111111 2。然后,如果我再按一次1,标签上写着111111168

也许我完全错了?在我的头脑中是有道理的,但现在我只是感到困惑。任何帮助都将是惊人的,谢谢

-(IBAction)buttonDigitPressed:(id)sender {

    currentNumber=currentNumber * 10 + (float)[sender tag];

    NSLog(@"currentNumber: %.f", currentNumber);

    phoneNumberLabel.text = [NSString stringWithFormat:@"%.f",currentNumber];

}
这张图片显示了我多次点击1。。你会认为它会一直显示1,不是吗

(单精度)浮点数使用23位作为尾数,因此可以用
浮点数精确表示的最大整数是2^24=16777216

所有较大的整数不能用
浮点数
精确表示,因此使用
浮点数
计算具有8位或8位以上数字的数字是不精确的

双精度浮点数可以精确表示最大为2^53=9007199254740992的数字


更好的解决方案可能是使用整数类型(例如,
uint64\t
),或者使用H2CO3答案中建议的字符串。

如果这是字符串操作,则不应使用数字。错误的可能原因:超出范围(因为
float
不够大)、精度损失(因为
float
的性质),等等。您应该做的是

phoneNumberLabel.text = [phoneNumberLabel.text stringByAppendingFormat:@"%d", [sender tag]];

+1用于使用字符串。我忙于寻找浮点数的精确精度,以至于没有想到明显的解决方案@MartinR Yap,这是一个相当复杂的问题。。。如果是字符串任务,那么不要使用数字来解决它。(另外,使用
int
s转换为
float
s非常难看,我几乎忍不住在键盘上呕吐。)你说得对,仔细看屏幕截图可以发现号码是某个电话号码,所以字符串是合适的。