Este post ha sido analizado por expertos así garantizamos la veracidad de nuestro tutorial.
Solución:
Necesitas convertir el número arábigo string al inglés primero y luego hacer la parte de cálculo.
let numberStr: String = "٨٦٩١٢٨٨١"
let formatter: NumberFormatter = NumberFormatter()
formatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
let final = formatter.number(from: numberStr)
let doubleNumber = Double(final!)
print("(doubleNumber)")
Solución Swift-5 para todos los no latinos string ocurrencias
extension String
var containsNonEnglishNumbers: Bool
return !isEmpty && range(of: "[^0-9]", options: .regularExpression) == nil
var english: String
return self.applyingTransform(StringTransform.toLatin, reverse: false) ?? self
uso –
textField.addTarget(self, action: #selector(didChangeText(field:)), for: .editingChanged)
@objc func didChangeText(field: UITextField)
if ((field.text?.containsNonEnglishNumbers) != nil)
field.text = field.text?.english
De cualquier idioma, a cualquier idioma
con la siguiente extensión, puedes hacerlo:
extension String
private static let formatter = NumberFormatter()
func clippingCharacters(in characterSet: CharacterSet) -> String
components(separatedBy: characterSet).joined()
func convertedDigitsToLocale(_ locale: Locale = .current) -> String
let digits = Set(clippingCharacters(in: CharacterSet.decimalDigits.inverted))
guard !digits.isEmpty else return self
Self.formatter.locale = locale
let maps: [(original: String, converted: String)] = digits.map
let original = String($0)
guard let digit = Self.formatter.number(from: String($0)) else
assertionFailure("Can not convert to number from: (original)")
return (original, original)
guard let localized = Self.formatter.string(from: digit) else
assertionFailure("Can not convert to string from: (digit)")
return (original, original)
return (original, localized)
var converted = self
for map in maps converted = converted.replacingOccurrences(of: map.original, with: map.converted)
return converted
Uso
"12345".convertedDigitsToLocale(Locale(identifier: "FA")) /* ۱۲۳۴۵ */
"۱۲۳۴۵".convertedDigitsToLocale(Locale(identifier: "EN")) /* 12345 */
Si te ha sido de ayuda este post, sería de mucha ayuda si lo compartes con más juniors y nos ayudes a difundir nuestro contenido.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)