【问题标题】:Double format with SwiftSwift 的双重格式
【发布时间】:2018-04-07 21:14:38
【问题描述】:

我需要在UILabel 中显示双数字,但我有一个规则,如果数字会加倍而没有小数值,那么它可以以整数格式显示,即 4.0 只显示 4,但如果数字是 4.879770,只显示两个小数四舍五入。

我将第一部分用于:

let number = 4.99

if number - Double(Int(number)) == 0 {
   print(Int(number))
} else {
   print(String(format: "%.2f", number))
}

但我希望有更好的方法

【问题讨论】:

标签: ios swift string double number-formatting


【解决方案1】:

这是一种更灵活的四舍五入算法

Swift 3 解决方案

extension Double {
// Rounds the double to 'places' significant digits
  func roundTo(places:Int) -> Double {
    guard self != 0.0 else {
        return 0
    }
    let divisor = pow(10.0, Double(places) - ceil(log10(fabs(self))))
    return (self * divisor).rounded() / divisor
  }
}


// Double(0.123456789).roundTo(places: 2) = 0.12
// Double(1.23456789).roundTo(places: 2) = 1.2
// Double(1234.56789).roundTo(places: 2) = 1200

或者,如果您指定应该由 martin 表示为 suggested 的十进制数字的最大数量,您可以使用 NSNumberFormatter:

let fmt = NSNumberFormatter()
fmt.locale = NSLocale(localeIdentifier: "en_US_POSIX")
fmt.maximumFractionDigits = 3
fmt.minimumFractionDigits = 0

println(fmt.stringFromNumber(123)!)      // 123
println(fmt.stringFromNumber(123.4)!)    // 123.4
println(fmt.stringFromNumber(123.45)!)   // 123.45

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多