代码之家  ›  专栏  ›  技术社区  ›  Jarvis The Avenger adri

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

  •  1
  • Jarvis The Avenger adri  · 技术社区  · 7 年前

    我面临的一种情况是,我只需要浮点小数点后2位,而不需要对其实际值进行四舍五入。

    我尝试了以下代码行:

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

    这给了我以下输出:

    var floatValue = 10.99999999 
    

    输出:11.00

    预期结果:10.99

    请告诉我你的想法。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Karamjeet Singh    7 年前

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

    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.999999999999这样的值,其打印为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)
    

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