我需要在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))
}
但我希望有更好的方法
最佳答案
这是一种更灵活的四舍五入为N个有效数字的算法
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
关于ios - Swift双格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46955151/