花落√莫相思

58 - Swift 之 千分位的添加

2017-08-04  本文已影响48人  NetWork小贱

一 、千分位的介绍

在一些商城或者金融类的App开发中,数字的显示出现非常频繁。数字位数很多的情况下,用不不能一眼看出是多少,所以为了能够增加体验就必须添加千分位。

二、千分位添加的思路

三 、千分位添加使用到的知识点

四、千分位添加的代码

// MARK : 添加千分位的函数实现
func addMicrometerLevel(valueSwift:String) -> String {
    // 判断传入参数是否有值
    if valueSwift.characters.count != 0 {
        /**
         创建两个变量
         integerPart : 传入参数的整数部分
         decimalPart : 传入参数的小数部分
         */
        var integerPart:String?
        var decimalPart = String.init()
        
        // 先将传入的参数整体赋值给整数部分
        integerPart =  valueSwift
        // 然后再判断是否含有小数点(分割出整数和小数部分)
        if valueSwift.contains(".") {
            let segmentationArray = valueSwift.components(separatedBy: ".")
            integerPart = segmentationArray.first
            decimalPart = segmentationArray.last!
        }
        
        /**
         创建临时存放余数的可变数组
         */
        let remainderMutableArray = NSMutableArray.init(capacity: 0)
        // 创建一个临时存储商的变量
        var discussValue:Int32 = 0
        
        /**
         对传入参数的整数部分进行千分拆分
         */
        repeat {
            let tempValue = integerPart! as NSString
            // 获取商
            discussValue = tempValue.intValue / 1000
            // 获取余数
            let remainderValue = tempValue.intValue % 1000
            // 将余数一字符串的形式添加到可变数组里面
            let remainderStr = String.init(format: "%d", remainderValue)
            remainderMutableArray.insert(remainderStr, at: 0)
            // 将商重新复制
            integerPart = String.init(format: "%d", discussValue)
        } while discussValue>0
        
        // 创建一个临时存储余数数组里的对象拼接起来的对象
        var tempString = String.init()

        // 根据传入参数的小数部分是否存在,是拼接“.” 还是不拼接""
        let lastKey = (decimalPart.characters.count == 0 ? "":".")
        /**
         获取余数组里的余数
         */
        for i in 0..<remainderMutableArray.count {
            // 判断余数数组是否遍历到最后一位
            let  param = (i != remainderMutableArray.count-1 ?",":lastKey)
           tempString = tempString + String.init(format: "%@%@", remainderMutableArray[i] as! String,param)
        }
        //  清楚一些数据
        integerPart = nil
        remainderMutableArray.removeAllObjects()
        // 最后返回整数和小数的合并
        return tempString as String + decimalPart
    }
    return valueSwift
}

五、 千分位类的扩展

// MARK : 我们要进行类的扩展
extension String  {
    
    // MARK : 添加千分位的函数实现
    func addMicrometerLevel() -> String {
        // 判断传入参数是否有值
        if self.characters.count != 0 {
            /**
             创建两个变量
             integerPart : 传入参数的整数部分
             decimalPart : 传入参数的小数部分
             */
            var integerPart:String?
            var decimalPart = String.init()
            
            // 先将传入的参数整体赋值给整数部分
            integerPart =  self
            // 然后再判断是否含有小数点(分割出整数和小数部分)
            if self.contains(".") {
                let segmentationArray = self.components(separatedBy: ".")
                integerPart = segmentationArray.first
                decimalPart = segmentationArray.last!
            }
            
            /**
             创建临时存放余数的可变数组
             */
            let remainderMutableArray = NSMutableArray.init(capacity: 0)
            // 创建一个临时存储商的变量
            var discussValue:Int32 = 0
            
            /**
             对传入参数的整数部分进行千分拆分
             */
            repeat {
                let tempValue = integerPart! as NSString
                // 获取商
                discussValue = tempValue.intValue / 1000
                // 获取余数
                let remainderValue = tempValue.intValue % 1000
                // 将余数一字符串的形式添加到可变数组里面
                let remainderStr = String.init(format: "%d", remainderValue)
                remainderMutableArray.insert(remainderStr, at: 0)
                // 将商重新复制
                integerPart = String.init(format: "%d", discussValue)
            } while discussValue>0
            
            // 创建一个临时存储余数数组里的对象拼接起来的对象
            var tempString = String.init()
            
            // 根据传入参数的小数部分是否存在,是拼接“.” 还是不拼接""
            let lastKey = (decimalPart.characters.count == 0 ? "":".")
            /**
             获取余数组里的余数
             */
            for i in 0..<remainderMutableArray.count {
                // 判断余数数组是否遍历到最后一位
                let  param = (i != remainderMutableArray.count-1 ?",":lastKey)
                tempString = tempString + String.init(format: "%@%@", remainderMutableArray[i] as! String,param)
            }
            //  清楚一些数据
            integerPart = nil
            remainderMutableArray.removeAllObjects()
            // 最后返回整数和小数的合并
            return tempString as String + decimalPart
        }
        return self
    }
    
    // MARK : 获取字符串的长度
    func length() -> Int {
        /**
         另一种方法:
         let tempStr = self as NSString
         return tempStr.length
         */
        return self.characters.count
    }
}

六 、两种添加千分位的方法的测试

1> 类的扩展方式

/**
 类的扩展测试
 */
let strExtension = "12345678"
print(strExtension.addMicrometerLevel())
print(strExtension.length())

print("-------******---------")

let strExtensionF = "12345678.09"
print(strExtensionF.addMicrometerLevel())
print(strExtensionF.length())

print("-------******---------")

let strExtensionK = "000.66"
print(strExtensionK.addMicrometerLevel())
print(strExtensionK.length())

效果展示

5614E417-730F-4005-B4BC-9649446EA43B.png

2> 直接方法添加千分位

print("---------XXXXXX---------")

// MARK : 方法的测试

let str = self.addMicrometerLevel(valueSwift: strExtension)
print(str)

let strF = self.addMicrometerLevel(valueSwift: strExtensionF)
print(strF)

let strK = self.addMicrometerLevel(valueSwift: strExtensionK)
print(strK)

效果展示

00E2C450-40C7-41B5-9E3D-7B8040DD593F.png
上一篇下一篇

猜你喜欢

热点阅读