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 也许我完全错了?在我的头脑中是有道理的,但现在我只是感到困惑。任何帮助都将是惊人的,谢谢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
-(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非常难看,我几乎忍不住在键盘上呕吐。)你说得对,仔细看屏幕截图可以发现号码是某个电话号码,所以字符串是合适的。