私はダブルを持っています:
let value = 0.99720317490866084
そして、二重拡張関数:
extension Double {
func stringWithFixedFractionDigits(min: Int, max: Int) -> String {
let formatter = NumberFormatter()
formatter.minimumFractionDigits = min
formatter.maximumFractionDigits = max
formatter.minimumIntegerDigits = 1
let numberObject = NSNumber(value: self)
return formatter.string(from: numberObject) ?? "\(self)"
}
}
私が使用する場合:
value.stringWithFixedFractionDigits(min: 2, max: 2)
取得します1.00
が取得したい0.99
何を変更できますか?
NumberFormatterの丸めモードプロパティを.downに設定する必要があります。
formatter.roundingMode = .down
新しいNSNumberオブジェクトを作成する必要はないことに注意してください。DoubleからNSNumberに安全にキャストするか、string(for: Any)
代わりにメソッドを使用できます。別の方法として、プロトコルFloatingPointを拡張して、すべてのFloatタイプで使用できるようにすることができます。
extension Formatter {
static let number = NumberFormatter()
}
extension FloatingPoint {
func formattedWithFractionDigits(minimum: Int = 2, maximum: Int = 2, minimumIntegerDigits: Int = 1, roundingMode: NumberFormatter.RoundingMode = .halfEven) -> String {
Formatter.number.roundingMode = roundingMode
Formatter.number.minimumFractionDigits = minimum
Formatter.number.maximumFractionDigits = maximum
Formatter.number.minimumIntegerDigits = minimumIntegerDigits
return Formatter.number.string(for: self) ?? ""
}
}
0.9972031749.formattedWithFractionDigits() // 1.00
0.9972031749.formattedWithFractionDigits(roundingMode: .down) // "0.99"
0.9972031749.formattedWithFractionDigits(minimumIntegerDigits: 0, roundingMode: .down) // ".99"
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加