0

我有 2 个按钮,每个按钮都有一个标签号,我将其传递到这个字符串中,我只是想在其中输入 1,1,1,1,1,1,1,1,1 或 2,2,2, 2,2,2,2 或射击 - 偶数,1,2,2,1,1,1。

一切正常,直到第 8 次或第 9 次按下按钮“1”,标签显示为 111111112。然后,如果我再次按下 1,标签显示为 111111168。

也许我完全错了?在我的脑海中是有道理的——但现在我只是感到困惑。任何帮助都会很棒,谢谢!

-(IBAction)buttonDigitPressed:(id)sender {

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

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

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

}

这张图片显示我多次击中 1.. 你会认为它会一直显示 1,不是吗?

在此处输入图像描述

4

2 回答 2

1

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

phoneNumberLabel.text = [phoneNumberLabel.text stringByAppendingFormat:@"%d", [sender tag]];
于 2013-02-09T21:54:57.017 回答
0

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

所有较大的整数都不能用 a 精确表示float,因此使用 8 位或更多位数的数字的计算float不准确。

双精度浮点数可以精确地表示高达 2^53 = 9007199254740992 的数字。

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

于 2013-02-09T21:53:39.213 回答