如何使用下一个规则格式化十进制值
0.12345 => 0.12
10.12345 => 10.12
100.12345 => 100.1
1000.12345 => 1,000
请注意,这个想法是占用相同的空间。
C样式printf
允许使用4.2%f
加上某种千位分隔符来执行此操作,但我不知道如何在Cocoa中反映它。
更新
如果您没有注意到示例说0.12345
转换为0.12
而不是0.1234
。
答案 0 :(得分: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")
答案 1 :(得分: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)]);
}
}
但是它忽略了OP想要的最多2个小数位,并且设置maximumFractionDigits=2
不起作用