2012-06-04 110 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 

或者我誤解了你的問題?