2012-06-04 88 views
2

好吧,所以我有一个自定义数字键盘工作,并显示在标签(numberField)0.00的数字,现在我需要它显示$ 0.00。

NSString *digit = sender.currentTitle; 
numberField.text = [numberField.text stringByAppendingString:digit]; 

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[numberFormatter setGroupingSeparator:@""]; 
[numberFormatter setMaximumIntegerDigits:4]; 
[numberFormatter setMaximumFractionDigits:2]; 
[numberFormatter setMaximumFractionDigits:2]; 

numberField.text = [numberField.text stringByReplacingOccurrencesOfString:@"." withString:@""]; 
NSDecimalNumber *currency = [[NSDecimalNumber decimalNumberWithString:numberField.text] decimalNumberByDividingBy: [NSDecimalNumber decimalNumberWithString:@"100"]]; 
NSString *numberFieldFormat = [numberFormatter stringFromNumber:currency]; 
numberField.text = numberFieldFormat; 

我试过一个$%1.2f但它崩溃,因为它不能识别$号作为数字。 有人可以帮我吗?或者有更好的方式来制作带有$符号的自定义键盘?

**编辑 我正在考虑让numberField做一个隐藏标签(alpha 0),并将一个副本(numberField2)直接放在顶部并通过stringWithFormat运行它。它的作品,但我认为可能有一个更干净的方式来做到这一点。

回答

6

你不想让它显示$0.00。如果我在英国呢?我不想让它显示£0.00

它看起来像你不正确地使用NSNumberFormatter。以下是如何格式化货币的数字:

NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
[f setNumberStyle:NSNumberFormatterCurrencyStyle]; 
NSString *string = [f stringFromNumber:[NSNumber numberWithFloat:1234.56]]; 
[f release]; 

这将正确地格式化,无论您的区域设置如何。它将使用正确的货币符号,正确的千位分隔符和正确的小数点分隔符。试图自己重新创建这个功能是一个糟糕的想法™。

+1

...和货币符号的正确位置(在德国为'0,00€') –

+0

是的,它正确地格式化了一个数字,但我无法在没有崩溃的情况下将其实施到数字键盘中。我已经尝试了一切。 – iamruskie

+0

@大卫为什么会崩溃?此外,[这个答案](http://stackoverflow.com/a/5291342/115730)和[这个答案](http://stackoverflow.com/a/4821091/115730)可能会有所帮助。 –

0

试试这个:

NSString *digit = sender.currentTitle; 
numberField.text = [numberField.text stringByAppendingString:digit]; 

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[numberFormatter setGrouping Separator:@""]; 
[numberFormatter setMaximumIntegerDigits:4]; 
[numberFormatter setMaximumFractionDigits:2]; 
[numberFormatter setMaximumFractionDigits:2]; 

numberField.text = [numberField.text stringByReplacingOccurrencesOfString:@"." withString:@""]; 
numberField.text = [numberField.text stringByReplacingOccurrencesOfString:@"$" withString:@""]; 
NSDecimalNumber *currency = [[NSDecimalNumber decimalNumberWithString:numberField.text] decimalNumberByDividingBy: [NSDecimalNumber decimalNumberWithString:@"100"]]; 
NSString *numberFieldFormat = [numberFormatter stringFromNumber:currency]; 
numberField.text = [NSString stringWithFormat:@"$%@", numberFieldFormat]; 
+0

不,我试过了,仍然崩溃。 我正在考虑让numberField隐藏一个标签(alpha 0),并将一个副本(numberField2)直接放在顶部并通过stringWithFormat运行。它的作品,但我认为可能有一个更干净的方式来做到这一点。 – iamruskie

+0

什么是崩溃的错误? –

+0

-1你应该*永远不要*自己格式化货币。你应该*总是*让'NSNumberFormatter'为你做。 –

0

从我的理解,你只是想一个$追加到您的字符串。你可以做这样的事情..

.... 

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[numberFormatter setGrouping Separator:@""]; 
[numberFormatter setMaximumIntegerDigits:4]; 
[numberFormatter setMaximumFractionDigits:2]; 
[numberFormatter setMaximumFractionDigits:2]; 

NSDecimalNumber *currency = [[NSDecimalNumber decimalNumberWithString:numberField.text]  decimalNumberByDividingBy: [NSDecimalNumber decimalNumberWithString:@"100"]]; 

NSString *formatted = [[currency stringValue] stringByReplacingOccurrencesOfString:[currency stringValue] withString:[NSString stringWithFormat:@"$%@",[currency stringValue]]]; 

    NSLog(@"%@", formatted); // Prints $0.00 

或者我误解了你的问题?