将浮点数限制在小数点后两位,并在 Swift 中为数字提供comma_separated格式



>我在将浮点数限制为小数点后两位并在 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!)

最新更新