2011-01-28 24 views
5

Tôi có một trình phân tích cú pháp trả về một số giá trị chuỗi mà tôi muốn sử dụng làm tham số cho khởi tạo đối tượng lớp của tôi.Chuỗi để trôi nổi trong mục tiêu c

Tôi có một phương pháp hỏi hai NSString và một giá trị float, nhưng tôi không thể chuyển đổi chuỗi nổi, đây là mã của tôi:

NSString *from = [[NSString alloc] initWithString:@"EUR"]; 
    NSString *to = [[NSString alloc] initWithString:[attributeDict objectForKey:@"currency"]]; 
    NSNumber *rate = [[NSNumber alloc] initWithFloat:[[attributeDict objectForKey:@"rate"] doubleValue]]; 


    currency = [[Currency init] alloc]; 
    [currency addCurrencyWithFrom:from andTo:to andRate:rate]; 

trong .h

- (id) addCurrencyWithFrom: (NSString *) from_ andTo:(NSString *) to_ andRate:(float *) float_; 
+0

'nhưng tôi không thể chuyển đổi chuỗi thành float' - Bạn có nghĩa là ở đây các chuỗi là NSString hoặc C String? – Mahesh

+0

Như một lưu ý phụ, nếu bạn đang làm một công cụ chuyển đổi tiền tệ, bạn có thể quan tâm đến việc kiểm tra: https://github.com/davedelong/DDUnitConverter Nó có một công cụ chuyển đổi tiền tệ để lấy dữ liệu từ IMF. –

+2

Lưu ý rằng bạn sẽ thực sự thực sự muốn tránh nổi khi làm bất cứ điều gì với tiền tệ. Nổi là nổi bật trong khả năng của mình để không thể đại diện chính xác hoặc tính toán các giá trị tương đối nhỏ. Tăng gấp đôi là tốt hơn đáng kể. – bbum

Trả lời

18

Không không không không không không không không không không không.

Sử dụng NSNumberFormatter. Đây là lý do tại sao nó tồn tại. -floatValue-doubleValue chỉ là các bản sửa lỗi tạm thời nhanh chóng và dễ dàng, nhưng chúng không thành công theo cách xấu. Ví dụ:

NSLog(@"%f", [@"123" floatValue]); //logs 123.0000 
NSLog(@"%f", [@"abc" floatValue]); //logs 0.0000 
NSLog(@"%f", [@"0" floatValue]); //logs 0.0000 
NSLog(@"%f", [@"42" floatValue]); //logs 42.0000 
NSLog(@"%f", [@"42x" floatValue]); //logs 42.0000 

-floatValue là không có khả năng phân biệt giữa một số thích hợp (@"0") và là một hợp lệ (@"abc").

NSNumberFormatter, mặt khác, sẽ cung cấp cho bạn nil nếu không thể phân tích cú pháp và NSNumber nếu có thể. Nó cũng có những thứ như ký hiệu tiền tệ, số thập phân cụ thể theo vùng và dấu phân cách hàng nghìn và miền địa phương của người dùng. -floatValue và bạn bè thì không.

Xem câu hỏi liên quan này cho biết thêm: How to convert an NSString into an NSNumber

+1

Hehe, bạn trả lời một câu hỏi khác mà tôi đã trôi nổi trong đầu. –

7
float f = [yourStringObject floatValue]; 
1

Hãy thử:

double f = [from_ doubleValue]; 
double t = [to_ doubleValue]; 

Ngoài ra, đi qua một N SNumber * thay vì phao sẽ không cho bạn kết quả mà bạn mong đợi.

Các vấn đề liên quan