NSNumberFormatter PercentStyle小数位

时间:2015-05-22 13:58:31

标签: swift nsnumberformatter

我正在使用Swift

let myDouble = 8.5 as Double

let percentFormatter            = NSNumberFormatter()
percentFormatter.numberStyle    = NSNumberFormatterStyle.PercentStyle
percentFormatter.multiplier     = 1.00

let myString = percentFormatter.stringFromNumber(myDouble)!

println(myString)

输出8%而不是8.5%,我怎么能输出8.5%? (但最多只有2位小数)

3 个答案:

答案 0 :(得分:34)

要设置小数位数,请使用:

percentFormatter.minimumFractionDigits = 1
percentFormatter.maximumFractionDigits = 1

根据您的需要设置最小值和最大值。应该是不言自明的。

答案 1 :(得分:4)

使用Swift 4.2,NumberFormatter有一个名为minimumFractionDigits的实例属性。 minimumFractionDigits有以下声明:

var minimumFractionDigits: Int { get set }
  

接收器允许小数点分隔符作为输入和输出后的最小位数。

NumberFormatter还有一个名为maximumFractionDigits的实例属性。 maximumFractionDigits有以下声明:

var maximumFractionDigits: Int { get set }
  

接收器允许小数点分隔符作为输入和输出后的最大位数。

以下Playground代码显示了如何使用minimumFractionDigitsmaximumFractionDigits来设置使用NumberFormatter时小数点分隔符后面的位数:

import Foundation

let percentFormatter = NumberFormatter()
percentFormatter.numberStyle = NumberFormatter.Style.percent
percentFormatter.multiplier = 1
percentFormatter.minimumFractionDigits = 1
percentFormatter.maximumFractionDigits = 2

let myDouble1: Double = 8
let myString1 = percentFormatter.string(for: myDouble1)
//let myString1 = percentFormatter.string(from: NSNumber(value: myDouble1)) // also works
print(String(describing: myString1)) // Optional("8.0%")

let myDouble2 = 8.5
let myString2 = percentFormatter.string(for: myDouble2)
print(String(describing: myString2)) // Optional("8.5%")

let myDouble3 = 8.5786
let myString3 = percentFormatter.string(for: myDouble3)
print(String(describing: myString3)) // Optional("8.58%")

答案 2 :(得分:0)

如有疑问,请查看苹果文档中的minimum fraction digitsmaximum fraction digits,这些文件将为您提供在格式化数字之前必须添加的以下行:

numberFormatter.minimumFractionDigits = 1
numberFormatter.maximumFractionDigits = 2

也请注意,您的input has to be 0.085 to get 8.5%。这是caused by the multiplier property,默认情况下百分比样式设置为100。