2016-06-21 95 views
-1

如何設置格式的十進制值與下一個規則如何使用NSNumberFormatter

0.12345 => 0.12 
10.12345 => 10.12 
100.12345 => 100.1 
1000.12345 => 1,000 

請注意,想法截斷部分是採取同樣的空間。 C風格printf允許使用某些東西4.2%f加上某種方式千位分隔符,但我沒有得到如何反映它在可可。

UPDATE

如果你沒有注意到例如說0.12345轉化爲0.120.1234

回答

1

由於NSNumberFormatter忽略maximumFractionDigits何時啓用重要模式我創建了自定義類

class TRNumberFormatter: NSNumberFormatter { 

    override func stringFromNumber(number: NSNumber) -> String? { 
     let digitsCount = "\(number.integerValue)".characters.count 
     let value = self.Tround(number.doubleValue, precision: min(self.maximumIntegerDigits - digitsCount, self.maximumFractionDigits)) 
     return super.stringFromNumber(value) 
    } 

    func Tround(value: Double, precision: Int) -> Double { 
     let divisor = pow(10.0, Double(precision)) 
     return round(value * divisor)/divisor 
    }  
} 

要使用它只是

var numberFormatter: NSNumberFormatter = TRNumberFormatter() 
numberFormatter.usesGroupingSeparator = true 
numberFormatter.maximumIntegerDigits = 4 
numberFormatter.minimumIntegerDigits = 1 
numberFormatter.maximumFractionDigits = 2 

結果

print(numberFormatter.stringFromNumber(0.12345)) // Optional("0.12") 
print(numberFormatter.stringFromNumber(10.12345)) // Optional("10.12") 
print(numberFormatter.stringFromNumber(100.12345)) // Optional("100.1") 
print(numberFormatter.stringFromNumber(1000.12345)) // Optional("1,000") 
0

此接近:

#import <Foundation/Foundation.h> 

int main(int argc, char *argv[]) { 
    @autoreleasepool { 
     NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
     nf.usesSignificantDigits = YES; 
     nf.maximumSignificantDigits = 4; 
     nf.usesGroupingSeparator = YES; 
     NSLog(@"%@", [nf stringFromNumber:@(10.23455)]); 
    } 
} 

但它忽略了最大的2個小數的OP希望和設置maximumFractionDigits=2不起作用

在我看來,我們不能效仿這一4.2 %f準確...沒有繼承整個事物

+0

如果我把它0.123456返回0.1234,而不是呀,因爲'nf.maximumSignificantDigits = 4 0.12 – Moldaone

+0

@Moldaone這裏的問題;'也許? – Droppy

+0

@Droppy請閱讀 – Moldaone