如何設置格式的十進制值與下一個規則如何使用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.12
不0.1234
。
如何設置格式的十進制值與下一個規則如何使用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.12
不0.1234
。
由於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")
此接近:
#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.123456返回0.1234,而不是呀,因爲'nf.maximumSignificantDigits = 4 0.12 – Moldaone
@Moldaone這裏的問題;'也許? – Droppy
@Droppy請閱讀 – Moldaone