2013-03-15 22 views
8

Tôi đang cố đọc một cảm biến và hiển thị nó dưới dạng phần trăm. [Một số giá trị] sẽ luôn luôn được giữa 0 và 1.Cách thực hiện toán trên NSNumber

Đây là mã của tôi:

NSNumber *reading = [some value]; 
reading = [reading floatValue] * 100; 

Tuy nhiên, tôi nhận được "Gán để NSNumber * _strong từ loại không tương thích phao"

Tôi mới để làm việc với các đối tượng NSNumber và đấu tranh để hiểu cách hiển thị cảm biến đọc của tôi dưới dạng phần trăm cho người dùng. Ví dụ: 75%

Nhờ sự giúp đỡ

+2

Có lý do cụ thể nào bạn đang sử dụng các đối tượng NSNumber không? Bạn thường không cần chúng trừ khi bạn đang viết và đọc plists hoặc JSON hoặc một cái gì đó, hoặc có thể khi giao dịch với Core Data hoặc Core Image. Tôi có xu hướng nắm giữ 'float' hoặc 'double's và chỉ đóng hộp chúng vào thời điểm tôi cần chúng đóng hộp. –

Trả lời

34

Bạn cần hộp số nguyên hoặc nổi giá trị để lưu trữ nó trong NSNumber,

như:

NSNumber *reading = @(10.123); 
reading = @([reading floatValue] * 100); 

Sau đó, bạn có thể in/chuyển đổi thành chuỗi như sau:

NSString *display=[NSString stringWithFormat:@"%@%%",reading]; 

LƯU Ý %% doubl các biểu tượng phần trăm điện tử

+0

Cảm ơn. Điều này hoạt động tuyệt vời! – sdknewbie

+0

@sdknewbiew Nhưng tôi nghĩ điều quan trọng hơn là "bạn có hiểu mã AnoopVaidya thực hiện những gì bạn muốn không?" – John

+0

@ John: Câu hỏi hay. Tôi nghĩ anh ta sẽ phân tích mã của tôi và của apurv. mã tương tự theo kiểu mới và cũ obj-c. Không có gì khác biệt nhiều. bạn nói gì –

7

Bạn nên giữ giá trị trong phao trước và cần phải tạo NSNumber từ nó.

NSNumber *reading = [NSNumber numberWithFloat:someValue]; 
float newNum = [reading floatValue] * 100; 
reading = [NSNumber numberWithFloat:newNum]; 
+0

Tại sao bạn sẽ đóng hộp 'someValue' chỉ để bỏ hộp giá trị một lần nữa trên dòng tiếp theo? Chỉ cần sử dụng 'someValue' trong biểu thức phép nhân. –

0

Tôi không thích viết nhiều dòng mã vì tôi hơi lười để viết mã nhiều dòng. Tôi luôn tìm kiếm các giải pháp nén. Vui lòng tìm các giải pháp sau đây.

float testValue=5.00032; 
    NSString *resultValue=[NSString stringWithFormat:@"%@%%",[NSNumber numberWithFloat:(testValue*100)]]; 

Giải pháp trên là giá trị nổi. Nếu bạn muốn cung cấp đầu vào là giá trị số nguyên, hãy thay thế "numberWithFloat" bằng "numberWithInt".

Tôi hy vọng rằng giải pháp này sẽ giúp bạn. Cảm ơn.

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