一 、千分位的介绍
在一些商城或者金融类的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())
效果展示
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)
效果展示