我想在数字前添加$

时间:2014-05-27 02:56:52

标签: ios objective-c

这里我试图在点击按钮时添加0.05,它完全正常工作。

price = [uPaidTxtFld.text floatValue];
result=[NSString stringWithFormat:@"%.02f", price+0.05];
[uPaidTxtFld setText:result];

[[NSUserDefaults standardUserDefaults] setValue:result forKey:@"price"];
[[NSUserDefaults standardUserDefaults] synchronize];

输出:

0.05, 0.10, 0.15, ….

但是我想要在点击按钮时输出$ 0.05,必须添加金额,金额必须是美元符号。这个我试过但没有工作......

NSString *dollarSymbol = @"$";
price = [uPaidTxtFld.text floatValue];
result=[NSString stringWithFormat:@"%@%.02f",dollarSymbol, price+0.05];
[uPaidTxtFld setText:result];

[[NSUserDefaults standardUserDefaults] setValue:result forKey:@"price"];
[[NSUserDefaults standardUserDefaults] synchronize];

输出:

$0.05, $0.05, $0.05, …

每当我点击按钮时,它只显示0.05美元,即不添加...

3 个答案:

答案 0 :(得分:4)

您的代码“未添加”的原因是它尝试解析带有美元符号的数字。由于数字不应包含美元符号(它们应由数字和可选的小数分隔符组成),失败的解析尝试会产生零。之后,您的代码会向其添加0.05,以便您获得所描述的结果。

现在让我们考虑解决问题的方法。首先,您应该将格式与保持当前值分开。创建一个数值变量,将当前金额存储在NSUserDefaults中。将0.05添加到该变量,然后将其格式化为货币。不要手动添加美元符号 - 让iOS为您执行此操作:

NSInteger amountPaid = [[NSUserDefaults standardUserDefaults] integerForKey:@"price"];
amountPaid += 5; // amountPaid is in cents
NSDecimalNumber *amount = [NSDecimalNumber decimalNumberWithMantissa:amountPaid exponent:-2 isNegative:NO];
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
[uPaidTxtFld setText:[currencyFormatter stringFromNumber:amount]];
[[NSUserDefaults standardUserDefaults] setInteger:result forKey:@"price"];
[[NSUserDefaults standardUserDefaults] synchronize];

我们的想法是将amountPaid存储为整数,并将其转换为仅用于格式化的数字。当您的计算涉及金钱时,最好远离floatdouble值,因为浮点表示即使在相当粗糙的粒度下也不能提供适当的精度(例如,将100个加在一起) 0.01 s不会产生1,就像在数学中一样。)

答案 1 :(得分:3)

如果你真的想这样做,你可以通过排除第一个字符来从字符串中获取数字。但是,我同意第一个评论者,并建议将数字存储在一个单独的变量中。这可能是一种更清洁的方式。

NSString *dollarSymbol = @"$";
price = [[uPaidTxtFld.text substringFromIndex:1] floatValue];
result= [NSString stringWithFormat:@"%@%.02f",dollarSymbol, price+0.05];
[uPaidTxtFld setText:result];

[[NSUserDefaults standardUserDefaults] setValue:result forKey:@"price"];
[[NSUserDefaults standardUserDefaults] synchronize];

答案 2 :(得分:0)

你只是简单地做到了

result=[NSString stringWithFormat:@"$%.02f",price+0.05];