2017-12-31 31 views
0

Ich möchte einen Double-Wert wie -24.5 in eine Währung formatierte Zeichenfolge wie -$24.50 formatieren. Wie würde ich das in Swift machen?Formatieren eines negativen Double in Währung in Swift

Ich folgte this post, aber es endet als $-24.50 formatieren (negatives Vorzeichen nach dem $), das ist nicht was ich will.

Gibt es eine elegantere Lösung, um dies zu erreichen, abgesehen von so etwas?

if value < 0 { 
    return String(format: "-$%.02f", -value) 
} else { 
    return String(format: "$%.02f", value) 
} 
+3

NumberFormatter. Ich rate dringend davon ab, in Swift im Allgemeinen "String (format:)" zu verwenden, ganz zu schweigen von der Währungsformatierung. Zum einen gibt es Währungen, die nicht '$' verwenden, und es gibt Einheimische, die kein '.' als Dezimaltrennzeichen verwenden (zB' $ 1,234,567.89' könnte in Europa '€ 1.234.567,89' sein) – Alexander

Antwort

3

Verwendung NumberFormatter:

import Foundation 

extension Double { 
    var formattedAsLocalCurrency: String { 
     let currencyFormatter = NumberFormatter() 
     currencyFormatter.usesGroupingSeparator = true 
     currencyFormatter.numberStyle = .currency 
     currencyFormatter.locale = Locale.current 
     return currencyFormatter.string(from: NSNumber(value: self))! 
    } 
} 

print(0.01.formattedAsLocalCurrency) // => $0.01 
print(0.12.formattedAsLocalCurrency) // => $0.12 
print(1.23.formattedAsLocalCurrency) // => $1.23 
print(12.34.formattedAsLocalCurrency) // => $12.34 
print(123.45.formattedAsLocalCurrency) // => $123.45 
print(1234.56.formattedAsLocalCurrency) // => $1,234.56 
print((-1234.56).formattedAsLocalCurrency) // => -$1,234.56 
+0

Frage für die Massen: Warum gibt ['NumberFormatter.string (from:)'] (https://developer.apple.com/documentation/foundation/numberformatter/1418046-string) ein optionales zurück? Wann kann es scheitern? – Alexander

+0

Es ist seltsam, da 'localizedString' kein optionales zurückgibt. – rmaddy

+0

Nicht sicher, was passiert, wenn Sie eine 'NSNumber (bool: true) 'übergeben? Aber die Inkonsistenz mit 'localizedString' ist seltsam. – HAS

Verwandte Themen