>我在将浮点数限制为小数点后两位并在 Swift 中提供逗号分隔的结果时遇到问题。我尝试了以下代码:
var myNum = 99.999999
myNum = (myNum * 100).rounded() / 100
print(myNum)
//Result : 100.0, Required_Result : 99.99
let formatted = String(format: "myNum: %.2f", myNum)
//Result : 100.00, Required_Result : 99.99
例如:1234.99999 应给出的结果为 1,234.99
对于逗号分隔和截断到小数点后两位,我使用了:
let numberFormatter = NumberFormatter()
numberFormatter.maximumFractionDigits = 2
numberFormatter.numberStyle = NumberFormatter.Style.decimal
let formattedNumber = numberFormatter.string(from: NSNumber(value: number))
return formattedNumber!
上面的代码给出以下结果:货号: 9999.9984结果 : 1,000.0所需结果: 9,999.99
使用NSNumberFormatter
并相应地配置其舍入模式:
let formatter = NumberFormatter()
formatter.maximumFractionDigits = 2
formatter.roundingMode = .down
let s = formatter.string(from: 99.99999)
print(s as Any) //99.99
这是
您需要使用NumberFormatter
解决此问题的解决方案
var myNum = 9999.9998
myNum = (myNum * 100.0) / 100.0
print(myNum)
let currencyFormatter = NumberFormatter()
currencyFormatter.numberStyle = .decimal
currencyFormatter.maximumFractionDigits = 2
currencyFormatter.minimumFractionDigits = 2
currencyFormatter.roundingMode = .down
let s = currencyFormatter.string(from: NSNumber.init(value: myNum)) // NSNumber init with double
print(s ?? "0.0")
为了获得更好的精度,您可以使用 Swift 标准库中的Float80
。
像这样使用它,你会得到9,999.99
结果:
let myNum = 9999.9998
let floaNumber = Float80(Int(myNum*100))
let result = Double(floaNumber/100.0)
print(result)
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
let formattedNumber = numberFormatter.string(from: NSNumber(value: result))
print(formattedNumber!)