Doubleから後続のゼロを削除する関数は何ですか?
var double = 3.0
var double2 = 3.10
println(func(double)) // 3
println(func(double2)) // 3.1
Swift 4では、次のように実行できます。
_extension Double {
func removeZerosFromEnd() -> String {
let formatter = NumberFormatter()
let number = NSNumber(value: self)
formatter.minimumFractionDigits = 0
formatter.maximumFractionDigits = 16 //maximum digits in Double after dot (maximum precision)
return String(formatter.string(from: number) ?? "")
}
}
_
使用例:print (Double("128834.567891000").removeZerosFromEnd())
結果:128834.567891
また、文字列の小数点以下の桁数を数えることもできます。
_import Foundation
extension Double {
func removeZerosFromEnd() -> String {
let formatter = NumberFormatter()
let number = NSNumber(value: self)
formatter.minimumFractionDigits = 0
formatter.maximumFractionDigits = (self.components(separatedBy: ".").last)!.count
return String(formatter.string(from: number) ?? "")
}
}
_
この方法で行うことができますが、文字列を返します。
var double = 3.0
var double2 = 3.10
func forTrailingZero(temp: Double) -> String {
var tempVar = String(format: "%g", temp)
return tempVar
}
forTrailingZero(double) //3
forTrailingZero(double2) //3.1
このシナリオは、デフォルトの出力精度が必要な場合に適しています。後続のゼロの可能性について値をテストし、それに応じて異なる出力形式を使用します。
extension Double {
var stringWithoutZeroFraction: String {
return truncatingRemainder(dividingBy: 1) == 0 ? String(format: "%.0f", self) : String(self)
}
}
(extension Float
でも機能しますが、Float80
では機能しません)
出力:
1.0→ "1"
0.1→ "0.1"
0.01→ "0.01"
0.001→ "0.001"
0.0001→ "0.0001"
このシナリオは、カスタム出力精度が必要な場合に適しています。このソリューションは、NumberFormatter + NSNumber MirekEからのソリューション とほぼ同じくらい高速に見えますが、1つの利点は、ここでNSObjectを回避していることです。
extension Double {
func string(maximumFractionDigits: Int = 2) -> String {
let s = String(format: "%.\(maximumFractionDigits)f", self)
for i in stride(from: 0, to: -maximumFractionDigits, by: -1) {
if s[s.index(s.endIndex, offsetBy: i - 1)] != "0" {
return String(s[..<s.index(s.endIndex, offsetBy: i)])
}
}
return String(s[..<s.index(s.endIndex, offsetBy: -maximumFractionDigits - 1)])
}
}
(extension Float
でも機能しますが、Float80
では機能しません)
maximumFractionDigits: 2
の出力:
1.0→ "1"
0.12→ "0.12"
0.012→ "0.01"
0.0012→ "0"
0.00012→ "0"