【问题标题】:How to separate integral part and fractional part in Swift? An how to transform fractional part into Int如何在 Swift 中分离整数部分和小数部分?如何将小数部分转换为 Int
【发布时间】:2022-01-29 23:11:47
【问题描述】:

我分离了小数部分,但现在我需要将该部分设为Int

例如:

0.5 -> 5
0.63 -> 63


let a1 = 2.5
let a2 = 7.63
let a3 = 8.81
let a4 = 99.0
let a1Frac = a1.truncatingRemainder(dividingBy: 1)
let a2Frac = a2.truncatingRemainder(dividingBy: 1)
let a3Frac = a3.truncatingRemainder(dividingBy: 1)
let a4Frac = a4.truncatingRemainder(dividingBy: 1)

【问题讨论】:

    标签: swift integer double


    【解决方案1】:

    如果您想保留小数位精度,首先应该使用 Swift Decimal 类型。其次要获得它的分数值,你可以检查这个post。一旦你有了你的小数,你所需要的就是得到它们的有效值:

    extension Decimal {
        func rounded(_ roundingMode: NSDecimalNumber.RoundingMode = .bankers) -> Decimal {
            var result = Decimal()
            var number = self
            NSDecimalRound(&result, &number, 0, roundingMode)
            return result
        }
        var whole: Decimal { self < 0 ? rounded(.up) : rounded(.down) }
        var fraction: Decimal { self - whole }
    }
    

    let a1 = Decimal(string: "2.5")!
    let a2 = Decimal(string: "7.63")!
    let a3 = Decimal(string: "8.81")!
    let a4 = Decimal(string: "99")!
    
    let a1Frac = a1.fraction  // 0.5
    let a2Frac = a2.fraction  // 0.63
    let a3Frac = a3.fraction  // 0.81
    let a4Frac = a4.fraction  // 0
    
    let a1significand = a1Frac.significand  // 5
    let a2significand = a2Frac.significand  // 63
    let a3significand = a3Frac.significand  // 81
    let a4significand = a4Frac.significand  // 0
    

    如果您需要将Decimal 值转换为Int,您只需将其转换为NSDecimalNumber 并获取它的intValue,或者将这些扩展添加到您的项目中以将相同的NSDecimalNumber 功能添加到Swift @ 987654330@类型:

    extension Decimal {
        var decimalNumber: NSDecimalNumber { self as NSDecimalNumber}
        var intValue: Int { decimalNumber.intValue }
    }
    

    a1significand.intValue  // 5
    a2significand.intValue  // 63
    a3significand.intValue  // 81
    a4significand.intValue  // 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多