2012-06-17 23 views
12

(int)myDouble khác với (int)Math.Truncate(myDouble) không?(int) myDouble có khác với (int) Math.Truncate (myDouble) không?

Có lý do nào tôi nên chọn cái này hơn cái kia không?

+0

phỏng đoán ngây thơ của tôi sẽ là sau này là một khía cạnh rõ ràng được xác định của API CLR, trong khi trước đây phụ thuộc vào đặc tả ngôn ngữ, mặc dù nó hoàn toàn giống nhau. –

+0

Tôi nghĩ rằng việc sử dụng 'Math.Truncate' là một bước không cần thiết. – Oded

+3

'Math.Truncate' được thiết kế cho khi bạn cần giữ kết quả của bạn dưới dạng' double' không có phần phân số. Nếu bạn muốn convent nó vào một 'int', sử dụng các diễn viên. – Douglas

Trả lời

8

Math.Truncate được thiết kế để khi bạn cần giữ kết quả của mình dưới dạng gấp đôi không có phần phân đoạn. Nếu bạn muốn convent nó vào một int, chỉ cần sử dụng các diễn viên trực tiếp.

Sửa: Để tham khảo, đây là tài liệu có liên quan từ “Explicit Numeric Conversions Table”:

Khi bạn chuyển đổi từ một giá trị gấp đôi hoặc phao đến một loại không thể thiếu, giá trị được cắt ngắn.

5

Như đã chỉ ra bởi Ignacio Vazquez-Abrams(int)myDouble sẽ thất bại trong cùng một cách như (int)Math.Truncate(myDouble) khi myDouble là quá lớn.

Vì vậy, không có sự khác biệt về đầu ra, nhưng (int)myDouble đang hoạt động nhanh hơn.

+2

+1: Câu trả lời này đặt ra một điểm thích hợp. Ngoại trừ việc bạn cần phải loại bỏ các '(int)' diễn viên từ đôi cắt ngắn, kể từ khi bạn nếu không sẽ kết thúc trong tình hình tương tự. – Douglas

+0

@Ignacio Vazquez-Abrams, bạn nói đúng. – dantuch

+0

Chúng ta không thể sử dụng '(dài) 'nếu chúng ta mong đợi con số này là khá lớn? – mpen

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