58 - Swift 之 千分位的添加

一 、千分位的介绍

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

二、千分位添加的思路

  • 判断传入的参数是否带有小数。如果带小数,就将参数分位 整数(A)小数 (B) 两个部分,否则,整体归为 (A)

  • (A) 进行除以 1000 求商,商为 (X) ; 余数为 (Y)。同时将(Y) 存放到一个可变的数组(KA)里。

  • 如果 (X) 不为 0,则 将 (X) 重新赋值给 (A)。在对 (A) 进行除以 1000 求商,商为 (X) ; 余数为 (Y)。同时将(Y) 插入到一个可变的数组(KA)的第一个位置里。这样循环一直到 (X) 等于 0 为止。

  • 然后从 (KA) 里面顺序取出对象并拼接,就可以了。

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

  • 类的扩展 extension

  • 获取字符串的长度

  • 字符串和数之间的转换

  • 三目运算

  • 数组的遍历循环

  • repeat.... while.... 循环的使用

四、千分位添加的代码

// 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 19,669评论 1 19
  • 第一章数和数的运算 一概念 (一)整数 1整数的意义 自然数和0都是整数。 2自然数 我们在数物体的时候,用来表示...
    meychang阅读 7,706评论 0 5
  • 1. 下列叙述错误的是()。 (2.0 分) A. 质量管理包括QA和QC一切活动的全部过程 B. 影像质量是指对...
    我们村我最帅阅读 9,698评论 0 8
  • 任大包,是一个带你到处游玩,找到新朋友的旅游体体验新媒体,面向喜欢到处旅行的旅游达人或者计划团队出游的公司,将他们...
    大包大阅读 3,573评论 0 0
  • 金黄的羽翼在火中烧毁 孤单的蝉啊 要怎样飞翔 驾驭着风去寻 失掉的伴侣 流浪的猫 你不必悲伤 至少你还在找家 不似...
    寒斋书郎阅读 1,810评论 4 3

友情链接更多精彩内容