从float获取字符串而不舍入其值

我面临一个场景,我只需要浮点小数点后的2个位置而不会舍入其实际值。

我尝试了以下代码行:

extension Float { func stringWith2Decimals() -> String { return String(format: "%.2f", self) } } 

这给了我以下输出:

 var floatValue = 10.99999999 

产量:11.00

预期结果:10.99

请让我知道你的想法。

这对你有帮助,我已经测试过了。

 let floatValue = 10.99999999 let formatter = NumberFormatter() formatter.maximumFractionDigits = 2 formatter.roundingMode = .down let s = formatter.string(from: NSNumber(value: floatValue)) print(s) 

另外一个案例的更新答案是值10.9它应该显示10.90。

情况1:当您只想打印实际十进制数字或最多2位十进制数字时

  let floatValue = 10.999999 let floatValue1 = 10 let floatValue2 = 10.9 let floatValue3 = 10.91 let formatter = NumberFormatter() formatter.minimumFractionDigits = 0 formatter.maximumFractionDigits = 2 formatter.roundingMode = .down let s = formatter.string(from: NSNumber(value: floatValue)) print(s!) // 10.99 let s1 = formatter.string(from: NSNumber(value: floatValue1)) print(s1!) // 10 let s2 = formatter.string(from: NSNumber(value: floatValue2)) print(s2!) // 10.9 let s3 = formatter.string(from: NSNumber(value: floatValue3)) print(s3!) // 10.91 

情况2:当您总是要打印两位十进制数字时。

  let floatValue = 10.999999 let floatValue1 = 10 let floatValue2 = 10.9 let floatValue3 = 10.91 let formatter = NumberFormatter() formatter.minimumFractionDigits = 2 formatter.maximumFractionDigits = 2 formatter.roundingMode = .down let s = formatter.string(from: NSNumber(value: floatValue)) print(s!) // 10.99 let s1 = formatter.string(from: NSNumber(value: floatValue1)) print(s1!) // 10.00 let s2 = formatter.string(from: NSNumber(value: floatValue2)) print(s2!) // 10.90 let s3 = formatter.string(from: NSNumber(value: floatValue3)) print(s3!) // 10.91 

希望你得到你想要的。 如果是,那么请投票否则让我知道你的实际要求是什么。

更新了问题的答案。 其价值如10.9999999999999999其印刷11.00,而不是10.99。

  let floatValue3 = 10.99999999999999 let (wholePart, fractionalPart) = modf(floatValue3) let stringFractionalPart = "\(fractionalPart)" let stringWholePart = "\(Int(wholePart))" let aryFractionalPart = stringFractionalPart.components(separatedBy: ".") var valueToDisplay = stringWholePart if aryFractionalPart.count >= 2 { let decimalDigits = aryFractionalPart[1] let digit2 = decimalDigits.prefix(2) valueToDisplay = "\(valueToDisplay).\(digit2)" } print(valueToDisplay) 

希望现在我满足你的要求。