1

ボタンを使用して追加するテキストフィールド(数字のみ)とUILabelがあります。UILabel は答えを表示し、Textfield は計算時に空白になります。前述の計算と機能は、1,000 万を超える数を追加したくなるまで問題なく動作します。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大きな値にfloatはそのまま使用し32-bit、double には64-bit大きな値を含めることができます。

于 2013-04-07T17:56:25.040 に答える