web-dev-qa-db-ja.com

Swift playground-カンマ付きの文字列を10進数付きの文字列に変換する方法

私はSwiftの世界では初めてです。

カンマ付きの文字列を小数付きの文字列に変換するにはどうすればよいですか?

コードはドット(。)で問題なく動作します

問題は、コンマ(、)を使用している場合です... with:var price

問題の原因は、10進数のフランス語キーボードがドット(。)の代わりにコンマ(、)を使用していることです。

それがキーである場合、NSNumberFormatterまたはgeneratesDecimalNumbersの使用方法が正確にわかりません。おそらく複数のオプションがあります。

//The answer change if "2,25" or "2.25" is used.

var price      : String = "2,25"
var priceFloat = (price as NSString).floatValue

//I need to have 2.25 as answer.

var costString = String(format:"%.2f", priceFloat)

あなたの時間とあなたの助けに感謝します!

10
ShakeMan

更新:Xcode8.2.1•Swift 3.0.2 NumberFormatter()を使用して文字列を数値に変換できます。次のようにdecimalSeparatorを指定する必要があります。

extension String {
    static let numberFormatter = NumberFormatter()
    var doubleValue: Double {
        String.numberFormatter.decimalSeparator = "."
        if let result =  String.numberFormatter.number(from: self) {
            return result.doubleValue
        } else {
            String.numberFormatter.decimalSeparator = ","
            if let result = String.numberFormatter.number(from: self) {
                return result.doubleValue
            }
        }
        return 0
    }
}


"2.25".doubleValue // 2.25
"2,25".doubleValue // 2.25

let price = "2,25"
let costString = String(format:"%.2f", price.doubleValue)   // "2.25"

NumberFormatでも通貨のフォーマットを行う必要があるため、FloatingPointプロトコルを拡張する読み取り専用の計算プロパティ通貨を作成して、StringdoubleValueプロパティからフォーマットされた文字列を返します。

extension NumberFormatter {
    convenience init(style: Style) {
        self.init()
        self.numberStyle = style
    }
}
extension Formatter {
    static let currency = NumberFormatter(style: .currency)
}
extension FloatingPoint {
    var currency: String {
        return Formatter.currency.string(for: self) ?? ""
    }
}

let costString = "2,25".doubleValue.currency   // "$2.25"

Formatter.currency.locale = Locale(identifier: "en_US")
"2222.25".doubleValue.currency    // "$2,222.25"
"2222,25".doubleValue.currency    // "$2,222.25"

Formatter.currency.locale = Locale(identifier: "pt_BR")
"2222.25".doubleValue.currency    // "R$2.222,25"
"2222,25".doubleValue.currency    // "R$2.222,25"
29
Leo Dabus
var price = "2,25"
price = price.replacingOccurrences(of: ",", with: ".")
var priceFloat = (price as NSString).floatValue
5

これに使用できますSwift

let currentAmount = 2,50

currentAmount = currentAmount.replacingOccurrences(of: ",", with: ".")

print(currentAmount) // 2.50
4
Celil Bozkurt