en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

6.11.2012

NSNumber 的格式化類型

  

對於常常處理不同的數值格式輸出時,是不是會覺得很困擾,如果你也有這類的煩惱,何不考慮使用 NSNumberFormatter 中的 setNumberStyle 方法函式,替你的數值格式化成不同的輸出格式,不過有個前提,你必需先將你手邊的數值轉換成 NSNumber 型態的物件,NSNumber 是在 Objective-C 中很常被使用來處理數值相關的資料型態,有別於一般傳統的數字資料型態,像是 int、float 或是 double 等,NSNumber 是一個物件,而非單純的數值資料型態,這表示 NSNumber 可以被用來做更多的事情,同時也可以更有效率的在各個不同的數值資料型態之間做轉換。

NSNumberFormatter 中的 setNumberStyle 方法函式提供了數種不同的格式來做轉換,查閱 NSNumberFormatter.h 與 CFNumberFormatter.h 檔案中的說明,包含以下6 種輸出格式。
//NSNumberFormatter.h
enum {
    NSNumberFormatterNoStyle         = kCFNumberFormatterNoStyle,
    NSNumberFormatterDecimalStyle    = kCFNumberFormatterDecimalStyle,
    NSNumberFormatterCurrencyStyle   = kCFNumberFormatterCurrencyStyle,
    NSNumberFormatterPercentStyle    = kCFNumberFormatterPercentStyle,
    NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
    NSNumberFormatterSpellOutStyle   = kCFNumberFormatterSpellOutStyle
};

//CFNumberFormatter.h
enum { // number format styles
    kCFNumberFormatterNoStyle         = 0,
    kCFNumberFormatterDecimalStyle    = 1,
    kCFNumberFormatterCurrencyStyle   = 2,
    kCFNumberFormatterPercentStyle    = 3,
    kCFNumberFormatterScientificStyle = 4,
    kCFNumberFormatterSpellOutStyle   = 5
};

你可以參考以下程式碼,使用 NSNumberFormatter 來格式化 NSNumber 中的數值。
//設定NSNumberFormatter的類型為貨幣格式
NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];

//取得數值並正規化
NSNumber *number = [NSNumber numberWithDouble:[[numberField text] doubleValue]];
NSString *formatString = [formatter stringFromNumber:number];

//輸出字串
[formatLabel setText:formatString];


ps:NSNumberFormatterNoStyle 為不包含任字元格式類型,同時也是不包含小數點位數的整數類型。






沒有留言:

張貼留言