数字超过1000万时计算总和不正确

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)

任何帮助将不胜感激.谢谢.

Gab*_*lla 5

你遇到了溢出.

使用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)

  • 更可能是整数溢出:-)(-2147483648是-2 ^ 31,如果是整数则为%d格式) (3认同)