0

1,1,1,1,1,1,1,1,1または2,2,2のいずれかを入力しようとしているこの文字列に渡すタグ番号を持つ2つのボタンがあります。 2,2,2,2 またはシュート - 偶数、1,2,2,1,1,1。

ボタン「1」を8回または9回押すまで、すべてが正常に機能し、ラベルには111111112と表示されます。その後、もう一度1を押すと、ラベルには111111168と表示されます。

多分私はこれについて完全に間違っていますか?頭では理解できましたが、今は混乱しています。どんな助けでも素晴らしいでしょう、ありがとう!

-(IBAction)buttonDigitPressed:(id)sender {

    currentNumber=currentNumber * 10 + (float)[sender tag];

    NSLog(@"currentNumber: %.f", currentNumber);

    phoneNumberLabel.text = [NSString stringWithFormat:@"%.f",currentNumber];

}

この画像は、私が何度も 1 を叩いている様子を示しています。

ここに画像の説明を入力

4

2 に答える 2

1

これが文字列演算である場合は、数値を使用しないでください。エラーの考えられる理由: 範囲外 (floatが十分に大きくないため)、精度の低下 ( の性質によるfloat) など。代わりにすべきことは次のとおりです。

phoneNumberLabel.text = [phoneNumberLabel.text stringByAppendingFormat:@"%d", [sender tag]];
于 2013-02-09T21:54:57.017 に答える
0

(単精度)浮動小数点数は仮数に23ビットを使用するため、aで正確に表すことができる最大の整数floatは2 ^ 24=16777216です。

すべての大きい整数をaで正確に表すことはできないfloatため、8桁以上の数値を使用した計算はfloat正確ではありません。

倍精度浮動小数点数は、2 ^ 53=9007199254740992までの数を正確に表すことができます。

より良い解決策は、整数型(たとえばuint64_t)、またはH2CO3の回答で提案されている文字列を使用することです。

于 2013-02-09T21:53:39.213 に答える