我發現了一個解決方案,根據這個問題的目的,我將爲那些未來有這個問題的人提供一個完整的答案。首先,我創建了一個名爲NumberFormatting的新Helper類並創建了兩個方法。
//
// NumberFormatting.h
// Created by Noah Hendrix on 12/26/09.
//
#import <Foundation/Foundation.h>
@interface NumberFormatting : NSObject {
}
-(NSString *)stringToCurrency:(NSString *)aString;
-(NSString *)decimalToIntString:(NSDecimalNumber *)aDecimal;
@end
,這裏是執行文件:
//
// NumberFormatting.m
// Created by Noah Hendrix on 12/26/09.
//
#import "NumberFormatting.h"
@implementation NumberFormatting
-(NSString *)stringToCurrency:(NSString *)aString {
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setGeneratesDecimalNumbers:YES];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
if ([aString length] == 0)
aString = @"0";
//convert the integer value of the price to a decimal number i.e. 123 = 1.23
//[currencyFormatter maximumFractionDigits] gives number of decimal places we need to have
//multiply by -1 so the decimal moves inward
//we are only dealing with positive values so the number is not negative
NSDecimalNumber *value = [NSDecimalNumber decimalNumberWithMantissa:[aString integerValue]
exponent:(-1 * [currencyFormatter maximumFractionDigits])
isNegative:NO];
return [currencyFormatter stringFromNumber:value];
}
-(NSString *)decimalToIntString:(NSDecimalNumber *)aDecimal {
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setGeneratesDecimalNumbers:YES];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
if (aDecimal == nil)
aDecimal = [NSDecimalNumber zero];
NSDecimalNumber *price = [NSDecimalNumber decimalNumberWithMantissa:[aDecimal integerValue]
exponent:([currencyFormatter maximumFractionDigits])
isNegative:NO];
return [price stringValue];
}
@end
第一種方法,stringToCurrency,將採取的整數(在這種情況下,文本字段中傳遞),並使用它轉換爲十進制值根據用戶區域設置適當移動小數點。然後它返回一個使用NSNumberFormatter格式化爲貨幣的字符串表示。
第二種方法做了相反處理,它採用類似於1.23的值並使用類似的方法將其轉換回123。
下面是我如何使用它
...
self.accountBalanceCell.textField.text = [[NumberFormatting alloc] decimalToIntString:account.accountBalance];
...
[self.accountBalanceCell.textField addTarget:self
action:@selector(updateBalance:)
forControlEvents:UIControlEventEditingChanged];
在這裏,我們的文本字段的值設置爲從數據存儲十進制值,然後我們設置一個觀察者來監視更改文本的示例字段和運行的方法updateBalance
- (void)updateBalance:(id)sender {
UILabel *balanceLabel = (UILabel *)[accountBalanceCell.contentView viewWithTag:1000];
NSString *value = ((UITextField *)sender).text;
balanceLabel.text = [[NumberFormatting alloc] stringToCurrency:value];
}
哪個簡單地取文本字段值,並通過上述的方法stringToCurrency運行它。
對我來說,這看起來很駭人,所以請花一點時間查看並清理它,如果你有興趣使用它。另外我注意到它的大值破壞。
我特地到這一點,但它會採取123,並將其轉換爲$ 123.00當時的想法是將它轉換爲$ 1.23 – 2009-12-25 08:38:37
也許你可以讀取字符串的長度,並考慮到語言環境,將其翻譯爲1.23(格式爲1.23),而不是123.00,格式爲123.00美元。 – 2009-12-25 09:25:38
例如,您可以在語言環境的'NSNumberFormatter'上調用'-currencyDecimalSeparator'和'-currencyGroupingSeparator'來學習如何處理格式。 – 2009-12-25 09:41:50