2012-09-20 41 views
17

Tôi đang sử dụng NSNumberFormatter để lấy giá trị tiền tệ từ một chuỗi và nó hoạt động tốt.NSNumberFormatter Tiền tệ Không có Biểu tượng?

tôi sử dụng mã này để làm như vậy:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
    [nf setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    NSString *price = [nf stringFromNumber:[NSNumber numberWithFloat:[textField.text floatValue]]]; 

Tuy nhiên, nó luôn luôn mang lại cho tôi một ký hiệu tiền tệ vào lúc bắt đầu của chuỗi. Thay vì làm nó bằng tay tạo thành chuỗi của tôi, tôi có thể không bằng cách nào đó có trình định dạng không cho chuỗi ký hiệu tiền tệ nào không?

Bất kỳ trợ giúp nào được đánh giá cao, cảm ơn.

+0

tâm rằng nó sẽ không phải lúc nào vào lúc bắt đầu - cho giá Euro, bạn sẽ có một cái gì đó như 12,34 € – ATV

Trả lời

57

Vâng, sau khi bạn thiết lập các phong cách, bạn có thể tinh chỉnh các khía cạnh cụ thể:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
[nf setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[nf setCurrencySymbol:@""]; // <-- this 
NSDecimalNumber* number = [NSDecimalNumber decimalNumberWithString:[textField text]]; 
NSString *price = [nf stringFromNumber:number]; 

Cũng giống như một số lời khuyên, bạn nên có lẽ sử dụng một định dạng số để đọc các giá trị chuỗi, đặc biệt là nếu người dùng đang bước vào nó (như được đề xuất bởi mã của bạn). Trong trường hợp này, nếu người dùng nhập văn bản định dạng theo ngôn ngữ cụ thể, các phương pháp loại chung là -floatValue-doubleValue sẽ không cung cấp cho bạn số bị cắt bớt. Ngoài ra, có thể bạn nên sử dụng -doubleValue để chuyển đổi thành số dấu chấm động từ văn bản do người dùng nhập là tiền tệ. Có thêm thông tin về điều này trong video phiên phát triển của WWDC'12 về quốc tế hóa.

Chỉnh sửa: Đã sử dụng NSDecimalNumber trong mã mẫu để trình bày số người dùng nhập. Nó vẫn chưa thực hiện xác nhận hợp lệ, nhưng tốt hơn mã gốc. Cảm ơn @Mark!

+0

Đối với tiền bạn cũng có thể muốn sử dụng NSDecimalNumber thay vì gấp đôi để bạn không có vấn đề làm tròn – Mark

+0

@Mark Vâng, tôi đồng ý, tôi thực sự sẽ chỉnh sửa mã gốc để làm điều đó. –

0

như đối với Swift Ngôn ngữ

let mymoney = 12000 

let formatter = NSNumberFormatter() 
formatter.numberStyle = .CurrencyStyle 
formatter.currencySymbol = "" 
formatter.locale = NSLocale.currentLocale() 

let resultString = formatter.stringFromNumber(mymoney)! 
2

Với Swift 3, NumberFormatter có một tính chất gọi currencySymbol. currencySymbol có khai báo như sau:

var currencySymbol: String! { get set } 

Các chuỗi được sử dụng bởi người nhận như một biểu tượng nội tệ.

Do đó, nếu được yêu cầu cho kiểu định dạng, bạn có thể đặt thuộc tính này thành trống String.


Mã Sân chơi sau đây cho thấy làm thế nào để thiết lập kiểu định dạng tiền tệ của bạn với một biểu tượng rỗng:

import Foundation 

let amount = 12000 

let formatter = NumberFormatter() 
formatter.numberStyle = .currency 
formatter.currencySymbol = "" 
formatter.locale = Locale(identifier: "en_US") // set only if necessary 

let result = formatter.string(for: amount) 
//let result = formatter.string(from: NSNumber(value: amount)) // also works 

print(String(describing: result)) 
// prints Optional("12,000.00") 
Các vấn đề liên quan