2010-10-30 42 views

Trả lời

81

Đôi là loại C, không phải đối tượng Objective-C. Do đó bạn sử dụng C phôi:

double myDouble = 3.2; 
int myInt = (int)myDouble; 
+0

Tôi tin NSDouble là C đối khách quan, hãy sửa lại cho tôi nếu tôi tôi sai. –

+3

@ Joe D: Chỉ có NSInteger (là một typedef cho int * hoặc * long tùy thuộc vào 32/64bit), nhưng có NSNumber, kết thúc tốt đẹp các kiểu dữ liệu C vào một đối tượng. –

4

Chỉ cần chuyển đổi được đề cập ở trên là đủ tốt mặc dù bạn có thể muốn sử dụng các hàm floor() hoặc ceil() trước đó.

+1

Tôi thấy điều này là quan trọng đặc biệt là trong bối cảnh của câu hỏi cần chính xác cho các khoản thanh toán. Tôi tìm thấy các số đơn giản như 230 chuyển đổi thành 229 sau khi chuyển đổi số nguyên. –

+3

Tôi tin rằng việc sử dụng dấu phẩy động để biểu diễn giá không tốt. Cách đúng là sử dụng các số nguyên (tính theo xu, vì vậy giá $ 2 là 200) và chuyển đổi số nguyên thành "2.00" ngay trên đầu ra. Ngoài ra Cocoa cung cấp lớp NSDecimalNumber được sử dụng bởi iOS chính nó để đại diện giá. – Vladimir

1

intValue là phương pháp cho ví dụ NSNumber. Đối với loại tỷ lệ như int, double và float, chúng không phải là loại lớp. Vì vậy, họ không có phương pháp. Một số ngôn ngữ như C# có thể bọc int, hoặc nhân đôi như một đối tượng, và chúng có thể được chuyển giao cho nhau bởi một thường trình con.

-6
double myDouble = 3.2; 

int myInt = @(myDouble).intValue; 

mẫu mã tôi thực sự sử dụng:

NSNumber * percentLike1 = @(@(self.percentLike.doubleValue*100).integerValue); 
+3

-1: Đó là một vòng xoay và cách chuyển đổi không hiệu quả. Về cơ bản, bạn đang tạo một đối tượng từ một nguyên thủy chỉ để lấy một giá trị nguyên thủy khác. Nếu bạn có điều này trong một vòng lặp, điều này có thể sẽ có một tác động đáng chú ý. – FreeAsInBeer

+0

độ phức tạp là không đổi. Đó là tất cả những gì tôi quan tâm. Không có gì đáng chú ý. –

+2

Mã của bạn ít phức tạp hơn hoặc thậm chí dễ đọc hơn '(int) myDouble' như thế nào? – FreeAsInBeer

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