什么是NSNumberFormatter默认roundingMode

iOS*_*eek 1 floating-point rounding nsnumberformatter ios swift

当我做:

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
Run Code Online (Sandbox Code Playgroud)

默认情况下使用什么舍入模式。我可以将其范围缩小.RoundHalfUp或缩小到,.RoundHalfEven但不知道使用了哪个,因为它们在我的测试用例中给出了相同的结果

let formatter = NSNumberFormatter()
formatter.locale = NSLocale.currentLocale()
formatter.numberStyle = .DecimalStyle
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
Run Code Online (Sandbox Code Playgroud)

Sul*_*han 5

默认的舍入模式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"
Run Code Online (Sandbox Code Playgroud)

随着.halfUp四舍五入:

formatter.roundingMode = .halfUp

print(formatter.string(from: 2.625)) // "2.63"
print(formatter.string(from: 2.635)) // "2.64"
print(formatter.string(from: 2.645)) // "2.65"
print(formatter.string(from: 2.655)) // "2.66"
Run Code Online (Sandbox Code Playgroud)