Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用NumberFormatter精度,大于或等于一千万的数字_Swift_Nsnumberformatter - Fatal编程技术网

Swift 使用NumberFormatter精度,大于或等于一千万的数字

Swift 使用NumberFormatter精度,大于或等于一千万的数字,swift,nsnumberformatter,Swift,Nsnumberformatter,这是我的密码 extension Float { func decimalString(maxPrecision: UInt) -> String { let formatter = NumberFormatter() formatter.numberStyle = .decimal formatter.maximumFractionDigits = Int(maxPrecision) return formatter

这是我的密码

extension Float {
    func decimalString(maxPrecision: UInt) -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        formatter.maximumFractionDigits = Int(maxPrecision)
        return formatter.string(from: NSNumber(value: self)) ?? ""
    }
}
但有一个问题

let a: Float = 12345678.1
print("\(a.decimalString(maxPrecision: 2))")
打印12345680,但预期为12345678.1
怎么了

Double
表示64位浮点数。
Float
表示32位浮点数

因此,
Double
更精确,请使用以下代码:

extension Double {
    func decimalString(maxPrecision: UInt) -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        formatter.maximumFractionDigits = Int(maxPrecision)
        return formatter.string(from: NSNumber(value: self)) ?? ""
    }
}

let a: Double = 12345678.1
print("\(a.decimalString(maxPrecision: 2))") // 12,345,678.1

使用
Double
代替,
Float
不够精确。@luk2302谢谢!!!!