0

テキストフィールドの値とラベルの値を追加して、別のラベルに配置しようとしています。

-(IBAction)finalTipTotalSelection:(id)sender
{
    NSString *billFinalAmount = [billAmountTextField text];

    float billFinalAmountFloat = [billFinalAmount floatValue];

    NSString *tipTotalAmount = [resultLabel text];

    float tipTotalAmountFloat = [tipTotalAmount floatValue];

    float finalAmountShow = billFinalAmountFloat + tipTotalAmountFloat;

    NSString *finalResult = [NSString stringWithFormat:@"$ %0.2f", finalAmountShow];

    [finalTotalLabel setText:finalResult];
}

Strings の floatValues を作成してから、float に他の floatValues を一緒に追加し、最後にそれをラベルに表示しています。唯一の問題は、このコードを実行すると、finalTotalLabel (最終的な金額を表示) に billAmountTextField の値のみが表示されることです。したがって、billAmountTextField = 187.82 で、tipTotalAmount が 10 の場合、finalTotalLabel は (197.82 ではなく) 187.82 を示します。私は自分の間違いを見つけることができないようです。ご協力いただきありがとうございます!

4

1 に答える 1

1

これは、tipTotalAmount の文字列の先頭に $ 文字が含まれていることが原因です。結果のチップ額の float 値は 0.0 になります。理由は次のとおりです。

floatValue... は、受信者が浮動小数点数の有効なテキスト表現で始まっていない場合、0.0 を返します。

floatValue の戻り値の説明については、NSStringのクラス リファレンスを参照してください。

メッセージ floatValue を渡す前に、最初に NSString インスタンスから非 10 進数およびドット文字を除外してみてください。次に例を示します。

NSMutableCharacterSet *_alnum = [NSMutableCharacterSet characterSetWithCharactersInString:@"."];
[_alnum formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet]];
NSString *newTipTotalAmount = [[tipTotalAmount componentsSeparatedByCharactersInSet:
                            [_alnum invertedSet]]
                           componentsJoinedByString:@""];
float tipTotalAmountFloat = [newTipTotalAmount floatValue];

ここで、newTipTotalAmountは「$ 39.19」であるtipTotalAmountと比較して「39.19」になり、floatValue メッセージを newTipTotalAmount に渡すと、正しい float 値が得られます。

于 2013-06-24T03:07:53.853 に答える