2013-04-07 50 views
1

我有一個textfield(僅數字)和一個UILabel,我正在使用一個按鈕一起添加。 UILabel顯示答案,並且Textfield在計算時變爲空白。提到的計算和功能,工作正常,直到我開始想要添加超過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]; 

任何幫助將不勝感激。謝謝。

回答

5

您遇到溢出問題。

使用double而不是float並且您應該修復此問題。

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

EDIT

如在評論中所指出,問題可能是對dtotaler變量的整數溢出,即,它可以是int太小用於保持的結果。

如果是這樣的情況下,dtotaler類型更改爲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 
+3

更可能是一個整數溢出:-)(-2147483648是-2^31,如果是整數則爲%d格式) – 2013-04-07 17:57:38

+0

你說得對。添加到帖子;) – 2013-04-07 18:00:13

+0

使用'double'在這裏沒有幫助,因爲大概'dtotaler'是一個'int'。 – omz 2013-04-07 18:03:03

2

您應該使用double大型值float32-bit和雙是64-bit並能包含很大的價值。