2008-08-01 28 views

Trả lời

419

Math.Floor làm tròn xuống, Math.Ceiling làm tròn lên và Math.Truncate vòng về 0. Do đó, Math.Truncate giống như Math.Floor cho số dương và giống như Math.Ceiling cho số âm. Đây là reference.

Để hoàn tất, Math.Round làm tròn số nguyên gần nhất. Nếu con số chính xác là giữa hai số nguyên, thì nó sẽ quay về phía số nguyên. Reference.

Xem thêm: Pax Diablo's answer. Rat khuyen khich!

+25

@ Chris, tôi đề nghị bạn sửa mô tả của bạn về Round, có hai cách để làm tròn (AwayFromZero và ToEven) và nó không tròn với số nguyên * gần nhất vì nó cũng có thể làm tròn phân số. – paxdiablo

+1

Vì vậy, chỉ cần thêm một ít vào câu hỏi gốc - sự khác biệt giữa Math.Truncate và chỉ cần đúc một số thập phân hoặc gấp đôi để int là gì? nó sẽ không chỉ tròn về phía không? –

+6

Khi nào '(int) myDouble' khác với' (int) Math.Truncate (myDouble) '? – mpen

36

Một số ví dụ:

Round(1.5) = 2 
Round(2.5) = 2 
Round(1.5, MidpointRounding.AwayFromZero) = 2 
Round(2.5, MidpointRounding.AwayFromZero) = 3 
Round(1.55, 1) = 1.6 
Round(1.65, 1) = 1.6 
Round(1.55, 1, MidpointRounding.AwayFromZero) = 1.6 
Round(1.65, 1, MidpointRounding.AwayFromZero) = 1.7 

Truncate(2.10) = 2 
Truncate(2.00) = 2 
Truncate(1.90) = 1 
Truncate(1.80) = 1 
343

Thực hiện theo các liên kết cho các mô tả MSDN của:

  • Math.Floor, mà làm tròn xuống về phía vô cực âm.
  • Math.Ceiling, làm tròn về phía cực dương.
  • Math.Truncate, làm tròn lên hoặc xuống về 0.
  • Math.Round, làm tròn số nguyên gần nhất hoặc số thập phân được chỉ định. Bạn có thể xác định hành vi nếu nó chính xác bằng nhau giữa hai khả năng, chẳng hạn như làm tròn để chữ số cuối cùng thậm chí ("Round(2.5,MidpointRounding.ToEven)" trở thành 2) hoặc để nó xa hơn 0 ("Round(2.5,MidpointRounding.AwayFromZero)" trở thành 3).

Sơ đồ và bảng sau đây có thể giúp:

-3  -2  -1   0   1   2   3 
+--|------+---------+----|----+--|------+----|----+-------|-+ 
    a      b  c   d   e 

         a=-2.7 b=-0.5 c=0.3 d=1.5 e=2.8 
         ====== ====== ===== ===== ===== 
Floor     -3  -1  0  1  2 
Ceiling     -2  0  1  2  3 
Truncate     -2  0  0  1  2 
Round (ToEven)   -3  0  0  2  3 
Round (AwayFromZero)  -3  -1  0  2  3 

Lưu ý rằng Round là rất nhiều mạnh mẽ hơn có vẻ như, đơn giản chỉ vì nó có thể tròn đến một số cụ thể của chữ số thập phân. Tất cả những người khác luôn luôn tròn số 0. Ví dụ:

n = 3.145; 
a = System.Math.Round (n, 2, MidpointRounding.ToEven);  // 3.14 
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15 

Với các chức năng khác, bạn phải sử dụng nhân/chia đoạn gian trá để đạt được hiệu quả tương tự:

c = System.Math.Truncate (n * 100)/100;     // 3.14 
d = System.Math.Ceiling (n * 100)/100;      // 3.15 
+4

Pax, tôi nghĩ rằng bạn đã có một sai lầm với: Vòng (AwayFromZero) -3 -2 1 2 3 Math.Round (-1.2, MidpointRounding.AwayFromZero) == -1 Math.Round (0.3, MidpointRounding .AwayFromZero) == 0.0 vv .. – dtroy

+0

Cảm ơn, @dtroy, tôi chưa bao giờ có nhu cầu sử dụng chế độ đó và, trong khi tôi ghi lại nó một cách chính xác nếu văn bản, tôi hoàn toàn có các ví dụ sai. Hy vọng rằng đó là cố định ngay bây giờ. – paxdiablo

+0

Xin lỗi để bình luận về một câu hỏi cũ nhưng tôi phải hỏi: Làm thế nào bạn có thể làm tròn "ToEven" đến hai chữ số thập phân? Chắc chắn lẻ và thậm chí chỉ áp dụng cho số nguyên? – Richiban

36

Math.Floor() vòng về phía vô cực âm

Math.Truncate vòng lên hoặc xuống về phía không.

Ví dụ:

Math.Floor(-3.4)  = -4 
Math.Truncate(-3.4) = -3 

khi

Math.Floor(3.4)  = 3 
Math.Truncate(3.4) = 3 
10

Math.Floor(): Trả về số nguyên lớn nhất nhỏ hơn hoặc bằng với quy định tăng gấp đôi độ chính xác dấu chấm động số

Math.Round():.. Làm tròn một giá trị số nguyên gần nhất hoặc không vượt quá số chữ số phân số

+0

OP hỏi về sự khác biệt giữa 'Floor()' và 'Truncate()', không phải 'Tầng()' và 'Vòng()'. –

17

họ là những chức năng tương đương với các số dương Sự khác biệt là ở cách họ xử lý các số âm

Ví dụ:..

Math.Floor(2.5) = 2 
Math.Truncate(2.5) = 2 

Math.Floor(-2.5) = -3 
Math.Truncate(-2.5) = -2 

liên kết MSDN: - Math.Floor Method - Math.Truncate Method

T.B. Hãy coi chừng Math.Round nó có thể không được những gì bạn mong đợi.

Để có được "tiêu chuẩn" làm tròn sử dụng kết quả:

float myFloat = 4.5; 
Console.WriteLine(Math.Round(myFloat)); // writes 4 
Console.WriteLine(Math.Round(myFloat, 0, MidpointRounding.AwayFromZero)) //writes 5 
Console.WriteLine(myFloat.ToString("F0")); // writes 5 
11

math.floor()

Trả về số nguyên lớn nhất nhỏ hơn hoặc bằng số lượng quy định.

MSDN system.math.floor

math.truncate()

Tính phần không thể thiếu của một số.

MSDN system.math.truncate

Math.Floor(2.56) = 2 
Math.Floor(3.22) = 3 
Math.Floor(-2.56) = -3 
Math.Floor(-3.26) = -4 

Math.Truncate(2.56) = 2 
Math.Truncate(2.00) = 2 
Math.Truncate(1.20) = 1 
Math.Truncate(-3.26) = -3 
Math.Truncate(-3.96) = -3 

Ngoài Math.round()

Math.Round(1.6) = 2 
    Math.Round(-8.56) = -9 
    Math.Round(8.16) = 8 
    Math.Round(8.50) = 8 
    Math.Round(8.51) = 9 
1

Math.floor sliiiide sang trái ...
Math.ceil sliiiide sang bên phải ...
Math.truncate criiiiss crooooss (sàn/ceil luôn hướng tới 0)
Math.round cha cha, thực sự trơn tru ... (đi đến bên gần nhất)

Hãy đi làm! (⌐ □ □ _)

Bên trái ... Math.floor
Mang nó trở lại tại y'all ... --
Hai bước nhảy lần này ... -=2

Mọi người vỗ tay ✋✋

Bạn có thể đi bao xa? Bạn có thể xuống thấp không? Tất cả các cách để floor?

if (this == "wrong") 
    return "i don't wanna be right"; 

Math.truncate(x) cũng giống như int(x).
bằng cách xóa một phân số dương hoặc âm, bạn luôn hướng tới 0.

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