2016-07-27 227 views
1

當我這樣做:什麼是NSNumberFormatter默認的RoundingMode

let a = self.oddsNumberFormatter.stringFromNumber(2.601) // 2.60 
let b = self.oddsNumberFormatter.stringFromNumber(2.655) // 2.66 
let c = self.oddsNumberFormatter.stringFromNumber(2.658) // 2.66 
let d = self.oddsNumberFormatter.stringFromNumber(2.678) // 2.68 
let e = self.oddsNumberFormatter.stringFromNumber(2.699) // 2.70 

什麼是默認的舍入模式。我可以把範圍縮小到.RoundHalfUp.RoundHalfEven但不可能不知道這是用來因爲他們給予同樣的結果對我的測試案例

let formatter = NSNumberFormatter() 
formatter.locale = NSLocale.currentLocale() 
formatter.numberStyle = .DecimalStyle 
formatter.minimumFractionDigits = 2 
formatter.maximumFractionDigits = 2 
+2

'打印(NSNumberFormatter() .roundingMode == .RoundHalfEven)'在我的快速測試中打印出「true」,但我不知道你是否可以依賴它,它可能取決於語言環境,區域,iOS/macOS版本....更好地設置日如果您需要定義的行爲,則明確舍入模式。 –

回答

0

NumberFormatter默認的舍入模式爲.halfEven這意味着數朝最近的四捨五入偶數。

這是默認在IEEE 754舍入模式

注意下面的例子:

let formatter = NumberFormatter() 
formatter.numberStyle = .decimal 
formatter.minimumFractionDigits = 2 
formatter.maximumFractionDigits = 2 

print(formatter.string(from: 2.625)) // "2.62" 
print(formatter.string(from: 2.635)) // "2.64" 
print(formatter.string(from: 2.645)) // "2.64" 
print(formatter.string(from: 2.655)) // "2.66" 

隨着.halfUp四捨五入的結果將是:

print(formatter.string(from: 2.625)) // "2.62" 
print(formatter.string(from: 2.635)) // "2.64" 
print(formatter.string(from: 2.645)) // "2.64" 
print(formatter.string(from: 2.655)) // "2.66"