Mus*_*afa 1 xcode objective-c ios
我有一个文本字段(仅限数字)和一个UILabel,我将使用一个按钮加在一起.UILabel显示答案,文本字段在计算时变为空白.所提到的计算和功能一直很好,直到我开始想要添加超过10万亿的数字.UILabel显示答案-2147483648.我为了得到这个结果而做的计算是0 + 1000000000.
我没有对任何一个字段的字符长度设置任何限制,因此不确定为什么会发生这种情况.
这是我计算的代码:
-(IBAction)addtotal2;{
float x = ([numberTextField.text floatValue]);
float y = ([dtotal.text floatValue]);
dtotaler = x + y;
dtotal.text = [NSString stringWithFormat:@"%d",dtotaler];
numberTextField.text = @"";
NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
[userDefaults setObject:[NSString stringWithFormat:@"%i",dtotaler] forKey:@"saveDtotal"];
[userDefaults synchronize];
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.谢谢.
你遇到了溢出.
使用double而不是,float你应该解决问题.
double x = ([numberTextField.text doubleValue]);
double y = ([dtotal.text doubleValue]);
Run Code Online (Sandbox Code Playgroud)
编辑
如注释中所述,问题可能是dtotaler变量上的整数溢出,即它可能int太小而无法保存结果.
如果是这种情况,请更改dtotalerto 的类型NSInteger,这在iOS上是类型的同义词long
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |