2008-11-13 41 views
47

Tổng số câu hỏi mới nhưng điều này khiến tôi phát điên! Tôi đang cố gắng thực hiện điều này:Làm thế nào để chuyển đổi một phao sang một int trong Objective C?

myInt = [myFloat integerValue]; 

nhưng tôi nhận được thông báo lỗi về cơ bản là integerValue không hoạt động trên phao nổi.

Tôi làm cách nào?

+3

nổi là nguyên thủy, họ không quan-c đối tượng do đó bạn không thể sử dụng [myFloat integerValue] trên đó. nếu nó không mở rộng NSObject, bạn không thể truyền thông điệp cho nó. – seanalltogether

+0

Phương pháp overkill là: [[NSNumber numberWithFloat: myFloat] integerValue] (nhưng bạn nên sử dụng cast, thực sự) – Kornel

+1

@porneL khá chắc chắn trong năm 2013 bạn có thể '[@ (myFloat) integerValue]' –

Trả lời

120

Tôi khá chắc chắn C cú pháp đúc theo kiểu hoạt động trong Mục tiêu C, vì vậy, hãy thử điều đó, quá:

int myInt = (int) myFloat; 

Có thể tắt tiếng cảnh báo trình biên dịch, ít nhất.

+0

nhưng sử dụng này tôi vứt bỏ các giá trị thập phân, tôi muốn làm như thế này: myFloat = 0.999 = myInt = 1 nhưng sử dụng mã của bạn myInt được 0, làm thế nào tôi có thể làm điều đó? –

+3

@GabrielMolter hãy xem 'roundf' - nó sẽ làm tròn thành số nguyên gần nhất :) –

+0

OK! Cảm ơn bạn! Chính xác những gì tôi cần! –

11

gì sai với:

int myInt = myFloat; 

gấu trong tâm trí này sẽ sử dụng quy tắc mặc định làm tròn, đó là hướng tới zero (tức -3.9f trở nên -3)

2

Để hỗ trợ cho việc thư giãn, hãy nhớ rằng Objective-C là một siêu của C, chứ không phải là một ngôn ngữ hoàn toàn mới.

Mọi thứ bạn có thể làm trong ANSI C thông thường đều có thể thực hiện trong Mục tiêu-C.

7
int myInt = (int) myFloat; 

Làm việc tốt cho tôi.

int myInt = [[NSNumber numberWithFloat:myFloat] intValue]; 

Vâng, đó là một tùy chọn. Nếu bạn thích đường vòng, tôi có thể nghĩ về một số sử dụng NSString. Tại sao dễ dàng, khi có sự thay thế phức tạp? :)

+0

Nếu bạn định biến nó thành một NSNumber, tại sao không sử dụng '@ (myFloat) .intValue'? –

+0

@ BenC.R.Leggiero, bởi vì câu trả lời đã được đưa ra vào tháng 8 năm 2010 và nó vẫn còn hợp lệ mặc dù có thể tối ưu hóa. NSNumber literals có benn được giới thiệu với LLVM/CLang 3.1 nếu tôi không có nhiều nhầm lẫn đã được phát hành vào năm 2012. Nhưng ngay cả sau đó tôi có thể cần một thời gian để tìm hiểu về nó bản thân mình. Cảm thấy tự do để thêm câu trả lời của riêng bạn, ngày tháng này, bằng cách sử dụng chữ và bạn thậm chí có thể kiếm được một upvote từ tôi. –

4

Bạn cũng có thể sử dụng C's lroundf(myFloat).


Một tip cực kỳ hữu ích: Trong biên tập Xcode, gõ mã của bạn như nói

myInt = roundf(someFloat); 

sau đó kiểm soát/nhấp chuột phải vào roundfChuyển đến định nghĩa (hoặc đơn giản là chỉ huy nhấp chuột).

Sau đó, bạn sẽ thấy rõ ràng danh sách rất dài các chức năng có sẵn cho bạn. (Không thể nhớ tất cả, vì vậy chỉ cần sử dụng thủ thuật này.)

Ví dụ, trong ví dụ có thể là lrintf là những gì bạn muốn.

Mẹo khác: để nhận tài liệu về nhiều chức năng đó. Trong Terminal.app của bạn (hoặc bất kỳ shell - không có gì để làm với Xcode, chỉ là Terminal.app) đơn giản chỉ cần gõ man lrintf và nó sẽ cung cấp cho bạn thông tin đầy đủ. Hy vọng nó sẽ giúp ai đó.

0

Dưới đây là một cách tiếp cận ngắn gọn hơn mà đã được giới thiệu vào năm 2012:

myInt = @(myFloat).intValue; 
Các vấn đề liên quan