我有一个NSTableView
,我填充了数字。这些通常是我可以正常显示的数字,如“1”或“15”。但是,它们的一部分总是非常大或很小,比如“1.5E8”。
我制作了一个NSNumberFormatter单例,所以我可以使用stringFromNumber来格式化这些,但似乎我只能打开或关闭E:
那些“0E0”是没用的,它们应该只是“0”。虽然似乎不是这样的设置。我只是错过了一些东西吗?
或者你总是要在代码中这样做吗?
以下是我的文档子类中的设置代码:
var measurementFormatter: NSNumberFormatter = NSNumberFormatter()
measurementFormatter.locale = NSLocale.currentLocale()
measurementFormatter.numberStyle = .ScientificStyle
measurementFormatter.alwaysShowsDecimalSeparator = true
measurementFormatter.minimumFractionDigits = 0
measurementFormatter.maximumFractionDigits = 6
measurementFormatter.generatesDecimalNumbers = false
使用示例:
numStr = (document?.measurementFormatter.stringFromNumber(num)!
答案 0 :(得分:1)
我不是自称是NSNumberFormatter
专家 - 有太多选择要记住。但设置zeroSymbol
似乎可以解决您的问题:
measurementFormatter.zeroSymbol = "0"
编辑:今晚我花了太多时间。似乎没有办法摆脱那些E0
,所以我决定改为NSNumberFormatter
的子类:
class MyNumberFormatter: NSNumberFormatter {
override func stringFromNumber(number: NSNumber) -> String? {
guard let str = super.stringFromNumber(number) else {
return nil
}
return str.stringByReplacingOccurrencesOfString("E0", withString: "", options: [.AnchoredSearch, .BackwardsSearch], range: str.startIndex..<str.endIndex)
}
}
var measurementFormatter = MyNumberFormatter()
measurementFormatter.locale = NSLocale.currentLocale()
measurementFormatter.numberStyle = .ScientificStyle
measurementFormatter.alwaysShowsDecimalSeparator = true
measurementFormatter.minimumFractionDigits = 0
measurementFormatter.maximumFractionDigits = 6
measurementFormatter.generatesDecimalNumbers = false
// Examples:
[0, 0.0014, 2, 15, 3.14, 100, 1500000000].forEach {
print("\($0) --> \(measurementFormatter.stringFromNumber($0)!)")
}
输出:
0 --> 0
0.0014 --> 1.4E-3
2 --> 2
15 --> 1.5E1
3.14 --> 3.14
100 --> 1E2
1500000000 --> 1.5E9