简体   繁体   English

Swift 5:在没有 NumberFormatter 的情况下添加小数分隔符

[英]Swift 5: Add decimal separators whitout NumberFormatter

I need to create a function to add the decimal and thousands separators to a number that is a string, I know I could use numberFormatter but I want to practice another way of doing it.我需要创建一个 function 来将十进制和千位分隔符添加到作为字符串的数字中,我知道我可以使用 numberFormatter 但我想练习另一种方法。 For example if I have "454685" the result will be "$ 4,546.85".例如,如果我有“454685”,结果将是“$ 4,546.85”。 This is my code:这是我的代码:

let number = "111234567" 

let firstIndex = number.startIndex
let firstNumber = number[firstIndex]

let lastIndex = number.index(before: number.endIndex)
let lastNumber = String(number[lastIndex])

let beforeLastIndex = number.index(number.endIndex, offsetBy: -2)
let beforeLastNumber = String(number[beforeLastIndex])

var decimalPart = beforeLastNumber + lastNumber
let decimalindex = number.index(number.endIndex, offsetBy: -2)

let intPart = String(number[..<decimalindex])

let totalNumber = "$" + intPart + "," + decimalPart
print(totalNumber)

var thousandSeparators = intPart.count % 3 == 1

I'm stuck here, I separated the decimal part from the integer part, but then I don't know how to add the thousand separator "."我被困在这里,我将小数部分与 integer 部分分开,但后来我不知道如何添加千位分隔符“。” to string number.为字符串编号。

You can achieve this by creating a function for a string that split the string as per the length passes in parameter and the direction for splitting.您可以通过为字符串创建 function 来实现此目的,该字符串根据传入参数的长度和拆分方向拆分字符串。

extension String {

    func split(length:Int, fromBack: Bool = false) -> [Substring] {
        guard length > 0 && length < count else { return [suffix(from:startIndex)] }
        if fromBack {
            return (0 ... (count - 1) / length).map { dropLast($0 * length).suffix(length) }.reversed()
        }
        return (0 ... (count - 1) / length).map { dropFirst($0 * length).prefix(length) }
    }
    
}

how to use this function:如何使用这个 function:

let number = "111234567"

let firstIndex = number.startIndex
let firstNumber = number[firstIndex]

let lastIndex = number.index(before: number.endIndex)
let lastNumber = String(number[lastIndex])

let beforeLastIndex = number.index(number.endIndex, offsetBy: -2)
let beforeLastNumber = String(number[beforeLastIndex])

var decimalPart = beforeLastNumber + lastNumber
let decimalindex = number.index(number.endIndex, offsetBy: -2)

let intPart = String(number[..<decimalindex])

let intWithThousandSeparators = intPart.split(length: 3, fromBack: true).joined(separator: ".")

let totalNumber = "$" + intWithThousandSeparators + "," + decimalPart
print(totalNumber)

Output: Output:

在此处输入图像描述

You can refer to this answers list for split strings into groups.您可以参考此答案列表以将字符串分组。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM