1

我有一个文本字段(仅限数字)和一个 UILabel,我使用按钮将它们添加在一起。UILabel 显示答案,文本字段在计算时变为空白。提到的计算和功能都可以正常工作,直到我开始想要添加超过 1000 万的数字。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];

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

4

2 回答 2

5

您正在经历溢出。

使用double代替,float你应该解决问题。

double x = ([numberTextField.text doubleValue]);
double y = ([dtotal.text doubleValue]);

编辑

如评论中所述,问题可能是dtotaler变量上的整数溢出,即它可能int太小而无法保存结果。

如果是这种情况,请将类型更改dtotalerNSInteger,这在 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
于 2013-04-07T17:54:45.227 回答
2

您应该按原样使用大double值,而双精度值可以包含大值。float32-bit64-bit

于 2013-04-07T17:56:25.040 回答