Преобразование строк в десятичные числа в Swift: подробное руководство

В Swift преобразование строки в десятичное значение — обычная задача, требуемая в различных сценариях. Независимо от того, работаете ли вы с пользовательским вводом, анализируете данные из внешних источников или выполняете вычисления, важно понимать различные методы преобразования строк в десятичные значения. В этой статье блога мы рассмотрим несколько методов с примерами кода, которые помогут вам добиться точного преобразования строк в десятичные числа в Swift.

Метод 1: использование десятичного инициализатора

let stringNumber = "3.14"
if let decimalValue = Decimal(string: stringNumber) {
    print(decimalValue) // Output: 3.14
} else {
    print("Invalid decimal format")
}

Метод 2. Использование класса NumberFormatter

let stringNumber = "5.678"
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
if let decimalValue = formatter.number(from: stringNumber) as? NSDecimalNumber {
    print(decimalValue) // Output: 5.678
} else {
    print("Invalid decimal format")
}

Метод 3. Использование инициализатора типа Decimal с языковым стандартом

let stringNumber = "9,876.54"
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "en_US")
if let decimalValue = formatter.number(from: stringNumber) as? NSDecimalNumber {
    print(decimalValue) // Output: 9876.54
} else {
    print("Invalid decimal format")
}

Метод 4. Использование специального подхода к манипуляции со строками

let stringNumber = "12345.6789"
if let decimalValue = Decimal(stringNumber.replacingOccurrences(of: ",", with: "")) {
    print(decimalValue) // Output: 12345.6789
} else {
    print("Invalid decimal format")
}

Метод 5. Использование регулярных выражений

import Foundation
let stringNumber = "0.12345"
let pattern = #"^(\d*\.?\d*)$|(\d*\.?\d+(e|E)(\+|-)?\d*)$"#
let regex = try NSRegularExpression(pattern: pattern)
let range = NSRange(location: 0, length: stringNumber.utf16.count)
if let match = regex.firstMatch(in: stringNumber, options: [], range: range) {
    if let decimalValue = Decimal(string: (stringNumber as NSString).substring(with: match.range)) {
        print(decimalValue) // Output: 0.12345
    } else {
        print("Invalid decimal format")
    }
} else {
    print("Invalid decimal format")
}

В этой статье мы рассмотрели пять различных методов преобразования строк в десятичные значения в Swift. Каждый метод имеет свои преимущества и может использоваться в зависимости от ваших конкретных требований. Независимо от того, предпочитаете ли вы использовать инициализатор Decimal, класс NumberFormatter, собственный подход к работе со строками или регулярные выражения, Swift предоставляет гибкие возможности для точного преобразования строк в десятичные числа. Поэкспериментируйте с этими методами, чтобы найти тот, который лучше всего соответствует вашим потребностям.