chuyển đổi gấp đôi thành int


156

Cách tốt nhất để chuyển đổi một doublethành một là intgì? Có nên sử dụng dàn diễn viên?


7
định nghĩa "tốt nhất". phụ thuộc nếu bạn muốn làm tròn lên / xuống, v.v.
RPM1984

8
@ RPM1984: Xác định etc.:)
Armen Tsirunyan

18
@Armen - touche` :) Dù sao cũng không quan trọng - Skeet ở đây, không có gì khác.
RPM1984

Câu trả lời:


237

Bạn có thể sử dụng một diễn viên nếu bạn muốn hành vi cắt ngắn về phía không. Ngoài ra, bạn có thể muốn sử dụng Math.Ceiling, Math.Round, Math.Floorvv - mặc dù bạn vẫn sẽ cần một dàn diễn viên sau đó.

Đừng quên rằng phạm vi intnhỏ hơn nhiều so với phạm vi double. Một dàn diễn viên từ doubleđến intsẽ không ném một ngoại lệ nếu giá trị là nằm ngoài phạm vi của inttrong một bối cảnh không được kiểm soát, trong khi một cuộc gọi đến Convert.ToInt32(double)di chúc. Kết quả của các diễn viên (trong một bối cảnh không được kiểm soát) rõ ràng không được xác định nếu giá trị nằm ngoài phạm vi.


24
@user: Kích thước của một intluôn là 32 bit, bất kể bạn đang sử dụng máy 32 hay 64 bit.
Joren

3
Và nhân đôi có thể lớn hơn nhiều so với int 64 bit.
Adrian Ratnapala

7
Đối với những người mới chơi C # như tôi: cả Toán và Chuyển đổi đều là một phần của Hệ thống. Vì vậy, câu trả lời hoàn chỉnh trông như thế này:intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
kris

9
@ user1290746: Điều đó sẽ hoạt động, nhưng bạn thường chỉ có using System;ở đầu tệp, tại thời điểm đó có thể làintVal = Convert.ToInt32(Math.Floor(dblVal));
Jon Skeet

3
@ user1290746: Nhưng trong trường hợp đó, tôi không nghĩ giải pháp phù hợp là khuyên mọi người sử dụng tên đủ điều kiện - giải pháp tốt hơn là tìm hiểu về các usingchỉ thị.
Jon Skeet

39

nếu bạn sử dụng cast, nghĩa là, (int)SomeDoublebạn sẽ cắt bớt phần phân số. Đó là, nếu SomeDoublelà 4,9999, kết quả sẽ là 4, chứ không phải 5. Chuyển đổi sang int không làm tròn số. Nếu bạn muốn làm tròn sử dụngMath.Round


34

Vâng, tại sao không?

double someDouble = 12323.2;
int someInt = (int)someDouble;

Sử dụng Convertlớp cũng hoạt động tốt.

int someOtherInt = Convert.ToInt32(someDouble);

7

Convert.ToInt32 là cách tốt nhất để chuyển đổi


Đây là một chức năng thường không an toàn vì nó chấp nhận mọi thứ.
Ant_222

4

Cách tốt nhất là sử dụng đơn giản Convert.ToInt32 . Nó là nhanh và cũng làm tròn chính xác.

Tại sao làm cho nó phức tạp hơn?


2

Đây là một ví dụ đầy đủ

class Example 
{    
  public static void Main() 
  {    
    double x, y; 
    int i; 

    x = 10.0; 
    y = 3.0; 

    // cast double to int, fractional component lost (Line to be replaced) 
    i = (int) (x / y); 
    Console.WriteLine("Integer outcome of x / y: " + i); 
  }    
}

Nếu bạn muốn làm tròn số đến số nguyên gần hơn, hãy làm như sau:

i = (int) Math.Round(x / y); // Line replaced



0

Cách của tôi là:

 - Convert.ToInt32(double_value)
 - (int)double_value
 - Int32.Parse(double_value.ToString());

11
Bạn không nghĩ rằng cách thứ ba là phức tạp và chậm không cần thiết?
Armen Tsirunyan

6
Thứ ba sẽ không làm việc với đôi với các phần phân số. ví dụ:double_value = 0.1
Jeff Mercado

Tôi nghĩ bạn có thể sử dụng Math.Floor.
lindexi

0
label8.Text = "" + years.ToString("00") + " years";

khi bạn muốn gửi nó đến một nhãn hoặc một cái gì đó và bạn không muốn bất kỳ thành phần phân số nào, đây là cách tốt nhất

label8.Text = "" + years.ToString("00.00") + " years";

nếu bạn muốn chỉ với 2, và nó luôn như vậy

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.