2015-02-04 21 views
6

Tôi là người mới trong thế giới Swift.Sân chơi Swift - Cách chuyển đổi một chuỗi bằng dấu phẩy thành chuỗi có số thập phân

Làm cách nào để chuyển đổi chuỗi bằng dấu phẩy thành Chuỗi có số thập phân?

Công việc mã của tốt với một dấu chấm

Vấn đề là khi tôi đang sử dụng một dấu phẩy (,) ... với (.): var giá

Nguồn gốc của vấn đề là các Decimal bàn phím tiếng pháp sử dụng một dấu phẩy (,) thay vì một dấu chấm (.)

không biết chính xác làm thế nào để sử dụng NSNumberFormatter hoặc generatesDecimalNumbers nếu đó là chìa khóa. Có nhiều sự lựa chọn.

//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) 

Cảm ơn bạn đã dành thời gian và trợ giúp!

Trả lời

17

update: Xcode 8.2.1 • Swift 3.0.2 Bạn có thể sử dụng NumberFormatter() để chuyển đổi chuỗi của bạn để số. Bạn chỉ cần phải xác định decimalSeparator như sau:

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" 

Bạn nên làm như định dạng tiền tệ cũng với NumberFormat, vì vậy tạo ra một đồng tiền thuộc tính chỉ đọc tính mở rộng giao thức FloatingPoint để trả về một chuỗi được định dạng từ tài sản Chuỗi doubleValue.

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" 

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

Currency.formatter.locale = Locale(identifier: "pt_BR") 
"2222.25".doubleValue.currency // "R$2.222,25" 
"2222,25".doubleValue.currency // "R$2.222,25" 
-2

Hoặc, nếu bạn không thích phần mở rộng:

let price = "2,25" 

    var counter: Int = 0 
    var noCommaNumber: String! 
    for var Character in price.characters { 
     if Character == "," { Character = "." } 
     if counter != 0 { noCommaNumber = "\(noCommaNumber)" + "\(Character)" } else { noCommaNumber = "\(Character)" } 
     counter++ 
    } 

    importo = Float(noCommaNumber) 
    let costString = String(format:"%.2f", importo) 
3
var price = "2,25" 
price = price.replacingOccurrences(of: ".", with: ",") 
var priceFloat = (price as NSString).floatValue 
0

Bạn có thể sử dụng cho điều này Swift 3:

let currentAmount = 2,50 

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

print(currentAmount) // 2.50 
Các vấn đề liên quan