美文网首页
Swift中的截断除法取余

Swift中的截断除法取余

作者: Sweet丶 | 来源:发表于2022-01-25 10:21 被阅读0次
    一、截断除法介绍
    对一个数求余数的,如果是整数运算,我们可以使用%来做;如果是浮点型数据的话,我们就需要用截断除法了. 浮点型不能用%来取余.png
    // 截断除法取余
    func testRemainder() {
        let a1 = 15 % 4
        let a2 = 15.1.truncatingRemainder(dividingBy: 4.1)
        
        print(a1, a2)
    }
    
    二、截断除法的原理

    目前自己能想到的实现方法:

    1. 将小数转化为整数,然后对整数取余,之后再转化为小数,这个就就是余数。
    2. 用一个循环减被除数,直到小于0,就把上一个拿来减除数的值返回,这个就是余数。
    3. 先做除法向下取整求得商,之后再根据商来计算得到余数:除数 = 被除数 * 商 + 余数。
      实际:按照注释的解释应该是使用的第3种。
    三、截断除法的使用例子:

    我们展示金额时,去掉无效数字0的方式:

    // 分转元,并且去掉金额的无效数字0
    func testPurifyYuan(with amountFen: Double) -> String {// 金额单位是分
        // 分转元
        let ret = amountFen / 100
        
        if amountFen.truncatingRemainder(dividingBy: 100) == 0 { // 刚好是整数元
            return  String(format: "%.0f", ret)
        } else if amountFen.truncatingRemainder(dividingBy: 10) == 0 { // 刚好是整数元
            return String(format: "%.1f", ret)
        } else {
            return String(format: "%.2f", ret)
        }
    }
    
    四、与remainder(dividingBy other: Double) -> Double的区别

    remainder(dividingBy other: Double) -> Double方法也是可以取余的,与截断除法取余的区别在于,求商时,向偶数的一侧取整,这样遇到0.5以上时,余数是负数。

    // 8.625 / 0.75 = 11.5
    
    // 这里的11就是对11.5向下取整的结果
    // 8.625 = 0.75 * 11 + 0.375
    let r2 = 8.625.truncatingRemainder(dividingBy: 0.75)
    print(r2) // 0.375
    
    // 这里的12就是对11.5向偶数侧取整的结果
    // 8.625 = 0.75 * 12 - 0.375
    let r = 8.625.remainder(dividingBy: 0.75)
    print(r) // -0.375
    

    相关文章

      网友评论

          本文标题:Swift中的截断除法取余

          本文链接:https://www.haomeiwen.com/subject/xlqvhrtx.html