Mục tiêu của tôi là đơn giản, tôi có một trường text lưu trữ một giá trị tiền tệ địa phương (ví dụ $ 1,000.00) và tôi cần lấy lại giá trị đó từ trường văn bản như một phao để thực hiện một số kiểm tra textfield.Chuyển đổi chuỗi tiền tệ thành float trong Objective-C
Mã này là thực sự đơn giản, đầu tiên tôi định dạng NSNumber đến một localizedString như vậy:
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
textfield.text = [formatter stringFromNumber:number];
Tất cả mọi thứ hoạt động tốt, nhưng sau đó tôi làm ngược lại để có được những doubleValue từ chuỗi này cục bộ:
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];
formatter.numberStyle = NSNumberFormatterCurrencyStyle; //also tested with NSNumberFormatterDecimalStyle
double d = [formatter numberFromString:textfield.text].doubleValue;
vấn đề là các định dạng chỉ trả về giá trị số nguyên của chuỗi của tôi và không phải là số thập phân, tồi tệ hơn, nếu nó là một localizedstring canadian (20 000,00 $) nó chỉ trả về 20.
Tôi đã tìm kiếm một thời gian và không thể tìm thấy bất kỳ điều gì về hành vi này. Cách giải quyết tất nhiên là lưu trữ NSNumber ngay trước khi định dạng nó thành textfield và sau đó thử nghiệm số nsnumber này, nhưng tôi thực sự không thấy nó đẹp.
Bạn có thể thấy điều này [Lấy một NSDecimalNumber từ một chuỗi cụ thể locale] [1] về [1]: http://stackoverflow.com/questions/317311/obtaining-an-nsdecimalnumber-from-a-locale-specific-string –