使用 swift 强制数字显示为小数点后两位
forcing a number to be displayed with 2 decimal places using swift
我有很多与此非常相似的代码。
//Gross Total
var gt:Float64 = tp01 + tp02 + tp03 + tp04 + tp05 + tat + ntat
GrossTotal.text = "\(gt)"
我在标签中显示数字的地方。此代码工作正常。我想知道如何强制显示的数字始终具有恰好 2 位小数的值。请仅 swift 代码。谢谢
Swift 字符串类型有一个采用格式字符串的初始值设定项:String(format:args:...)
您的代码可能如下所示:
GrossTotal.text = 字符串(格式:“%.2f”,gt)
编辑:我在字符串前面有一个“@”,这是一个 Objective-C 习惯。
编辑:输入错误已解决。
更新:Xcode 10.2 • Swift 5
您可以使用 NumberFormatter 根据需要格式化您的字符串,并按如下方式向上或向下舍入:
extension Formatter {
static let number = NumberFormatter()
}
extension BinaryFloatingPoint {
func fratcionDigitis(_ n: Int, roundingMode: NumberFormatter.RoundingMode = .halfEven) -> String {
Formatter.number.roundingMode = roundingMode
Formatter.number.maximumFractionDigits = n
Formatter.number.minimumFractionDigits = n
return Formatter.number.string(for: self) ?? ""
}
}
let tp01 = 3.3232
let tp02 = 1.5673
let tp03 = 1.9764
let tp04 = 2.0986
let tp05 = 5.5557
let tat = 2.7448
let ntat = 2.2339
let gt: Float64 = tp01 + tp02 + tp03 + tp04 + tp05 + tat + ntat // 19.4999
let rounded = gt.fratcionDigitis(2) // "19.50"
let roundDown = gt.fratcionDigitis(2, roundingMode: .down) // "19.49"
let roundUp = gt.fratcionDigitis(2, roundingMode: .up) // "19.50"
或者正如我在评论中提到的,您可以只使用 String(format:)
String(format: "%.2f", 2.0)
您可以为此创建一个漂亮的扩展程序:
使用:GrossTotal.text = gt.format(2)
分机:
extension Double { // Same as Float64
func format(f: Int) -> String {
return String(format: "%.\(f)f", self)
}
}
如果您想将该值保留为 Float64
而不是字符串,您还可以将其添加到您的扩展程序中:
func roundTo(numDigits: Int) -> Double {
let power = pow(10.0, Double(numDigits))
return round(self * power) / power
}
使用:gt.roundTo(2)
其中returns一个Double
/Float64
为同一类型
我有很多与此非常相似的代码。
//Gross Total
var gt:Float64 = tp01 + tp02 + tp03 + tp04 + tp05 + tat + ntat
GrossTotal.text = "\(gt)"
我在标签中显示数字的地方。此代码工作正常。我想知道如何强制显示的数字始终具有恰好 2 位小数的值。请仅 swift 代码。谢谢
Swift 字符串类型有一个采用格式字符串的初始值设定项:String(format:args:...)
您的代码可能如下所示: GrossTotal.text = 字符串(格式:“%.2f”,gt)
编辑:我在字符串前面有一个“@”,这是一个 Objective-C 习惯。 编辑:输入错误已解决。
更新:Xcode 10.2 • Swift 5
您可以使用 NumberFormatter 根据需要格式化您的字符串,并按如下方式向上或向下舍入:
extension Formatter {
static let number = NumberFormatter()
}
extension BinaryFloatingPoint {
func fratcionDigitis(_ n: Int, roundingMode: NumberFormatter.RoundingMode = .halfEven) -> String {
Formatter.number.roundingMode = roundingMode
Formatter.number.maximumFractionDigits = n
Formatter.number.minimumFractionDigits = n
return Formatter.number.string(for: self) ?? ""
}
}
let tp01 = 3.3232
let tp02 = 1.5673
let tp03 = 1.9764
let tp04 = 2.0986
let tp05 = 5.5557
let tat = 2.7448
let ntat = 2.2339
let gt: Float64 = tp01 + tp02 + tp03 + tp04 + tp05 + tat + ntat // 19.4999
let rounded = gt.fratcionDigitis(2) // "19.50"
let roundDown = gt.fratcionDigitis(2, roundingMode: .down) // "19.49"
let roundUp = gt.fratcionDigitis(2, roundingMode: .up) // "19.50"
或者正如我在评论中提到的,您可以只使用 String(format:)
String(format: "%.2f", 2.0)
您可以为此创建一个漂亮的扩展程序:
使用:GrossTotal.text = gt.format(2)
分机:
extension Double { // Same as Float64
func format(f: Int) -> String {
return String(format: "%.\(f)f", self)
}
}
如果您想将该值保留为 Float64
而不是字符串,您还可以将其添加到您的扩展程序中:
func roundTo(numDigits: Int) -> Double {
let power = pow(10.0, Double(numDigits))
return round(self * power) / power
}
使用:gt.roundTo(2)
其中returns一个Double
/Float64
为同一类型