Iphone 使用intvalue、floatValue发出
计算器。每次我单击一个数字按钮时,标签都会附加到一个“displaystring”可变字符串中。我注意到,在为同一个数字输入11位数字后,floatValue或intValue函数会给出相同的错误 self.lbldisplay.text正确显示displaystring的内容。但是 输入10位数字后,intValue或floatValue甚至NSCanner实用程序都会返回相同的错误 以下是代码和日志:Iphone 使用intvalue、floatValue发出,iphone,Iphone,计算器。每次我单击一个数字按钮时,标签都会附加到一个“displaystring”可变字符串中。我注意到,在为同一个数字输入11位数字后,floatValue或intValue函数会给出相同的错误 self.lbldisplay.text正确显示displaystring的内容。但是 输入10位数字后,intValue或floatValue甚至NSCanner实用程序都会返回相同的错误 以下是代码和日志: // original [self.displayString appendStrin
// original
[self.displayString appendString: [NSString stringWithFormat: @"%i", [sender tag]]];
else { // new entry
//origin test
[self.displayString setString:@""];
[self.displayString appendString: [NSString stringWithFormat: @"%i", [sender tag]]];
bIsTypingANumber = TRUE;
}
// fCurrentNumber = [self.displayString floatValue];
// [self display:fCurrentNumber];
// self.lblDisplay.text = displayString;
NSString *numberString;
NSString *str = [NSString stringWithString:displayString];
NSScanner *theScanner = [NSScanner scannerWithString:str];
[theScanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:nil];
[theScanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&numberString];
NSLog(@"Attempts: %i", [numberString integerValue]);
self.lblDisplay.text = str;
输出:
2012-08-26 17:23:34.264 Pilots Fuel[4989:f803] Attempts: 1
2012-08-26 17:23:34.400 Pilots Fuel[4989:f803] Attempts: 11
2012-08-26 17:23:34.552 Pilots Fuel[4989:f803] Attempts: 111
2012-08-26 17:23:34.800 Pilots Fuel[4989:f803] Attempts: 1111
2012-08-26 17:23:34.936 Pilots Fuel[4989:f803] Attempts: 11111
2012-08-26 17:23:35.072 Pilots Fuel[4989:f803] Attempts: 111111
2012-08-26 17:23:35.216 Pilots Fuel[4989:f803] Attempts: 1111111
2012-08-26 17:23:35.344 Pilots Fuel[4989:f803] Attempts: 11111111
2012-08-26 17:23:35.488 Pilots Fuel[4989:f803] Attempts: 111111111
2012-08-26 17:23:35.632 Pilots Fuel[4989:f803] Attempts: 1111111111
2012-08-26 17:23:35.776 Pilots Fuel[4989:f803] Attempts: 2147483647
2012-08-26 17:23:36.056 Pilots Fuel[4989:f803] Attempts: 2147483647
这是因为整数数据类型溢出,该类型只能保存-2147483648到2147483647(大小为32位)之间的值。
double
数据类型可以保存较大的值,但最终会失去精度
试一试
这将使用64位精度,并允许更多位数。这是因为整数数据类型溢出,该类型只能保存-2147483648到2147483647之间的值(大小为32位)。
double
数据类型可以保存较大的值,但最终会失去精度
试一试
它将使用64位精度,并允许使用更多的数字。欢迎使用SO。请写清楚你的问题的问题。此外,如果您提供代码示例,请确保它们的格式正确,以便其他人更容易阅读 请注意,您使用的是
int
和float
,两者都有大小限制。它们不能代表所有可能的数字。可以使用双精度和64位整数,但它们也有限制。如果您确实需要更大的数字,请查看NSDecimalNumber
是否适合您的用例。它确实有一个限制(尽管相当大)
如果您需要更大的数字,则需要使用支持任意大数字的库。欢迎使用。请写清楚你的问题的问题。此外,如果您提供代码示例,请确保它们的格式正确,以便其他人更容易阅读 请注意,您使用的是
int
和float
,两者都有大小限制。它们不能代表所有可能的数字。可以使用双精度和64位整数,但它们也有限制。如果您确实需要更大的数字,请查看NSDecimalNumber
是否适合您的用例。它确实有一个限制(尽管相当大)
如果您需要更大的数字,则需要使用支持任意大数字的库。做得好-我收到了相同的“错误”,但很晚会遇到非常大的数字。Thaaaaannkss:-()()()))做得很好-我得到了同样的“错误”,但很晚就有了一个非常巨大的数字。Thaaaaannkss:-()()()))谢谢你的回答-我正在努力理解这个网站的用户界面,但我并不总是清楚这一点。谢谢你的回答。谢谢你的回答-我正在努力理解这个网站的用户界面,这对我来说并不总是清楚的。谢谢你的回答。
NSLog(@"Attempts: %lli", [numberString longLongValue]);