Sự khác biệt giữa Math.Floor()
và Math.Truncate()
trong .NET là gì?
Sự khác biệt giữa Math.Floor()
và Math.Truncate()
trong .NET là gì?
Câu trả lời:
Math.Floor
làm tròn xuống, làm Math.Ceiling
tròn lên và làm Math.Truncate
tròn về không. Vì vậy, Math.Truncate
giống như Math.Floor
cho số dương, và thích Math.Ceiling
cho số âm. Đây là tài liệu tham khảo .
Để đầy đủ, làm Math.Round
tròn đến số nguyên gần nhất. Nếu số chính xác ở giữa hai số nguyên, thì nó sẽ quay tròn về số chẵn. Tài liệu tham khảo.
Xem thêm: Câu trả lời của Pax Diablo . Rất khuyến khích!
(int)myDouble
khác với (int)Math.Truncate(myDouble)
?
Thực hiện theo các liên kết này cho các mô tả MSDN về:
Math.Floor
, mà làm tròn xuống về phía vô cực tiêu cực.Math.Ceiling
, mà làm tròn lên về phía vô cực tích cực.Math.Truncate
, làm tròn lên hoặc xuống về không.Math.Round
, làm tròn đến số nguyên gần nhất hoặc số vị trí thập phân được chỉ định. Bạn có thể chỉ định hành vi nếu nó chính xác tương đương giữa hai khả năng, chẳng hạn như làm tròn sao cho chữ số cuối cùng là chẵn (" Round(2.5,MidpointRounding.ToEven)
" trở thành 2) hoặc sao cho nó cách xa 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
nó mạnh hơn rất nhiều so với vẻ ngoài của nó, đơn giản vì nó có thể làm tròn đến một số vị trí thập phân cụ thể. Tất cả những người khác làm tròn đến số thập phân không. 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 thủ thuật nhân / chia để đạ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
even
như một tính chất của chữ số cuối cùng trong số được làm tròn, không có nghĩa là toàn bộ số phải là bội của hai. Nhân tiện, xin lỗi, phải mất rất lâu để quay lại với bạn, hy vọng bạn không chỉ ngồi chờ đợi phản hồi của tôi :-)
Math.Floor()
vòng về phía vô cực tiêu cực
Math.Truncate
làm tròn lên hoặc xuống về phía không.
Ví dụ:
Math.Floor(-3.4) = -4
Math.Truncate(-3.4) = -3
trong khi
Math.Floor(3.4) = 3
Math.Truncate(3.4) = 3
Vài 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
Math.floor
sliiiide bên trái ...
Math.ceil
sliiiide bên phải ...
Math.truncate
criiiiss crooooss (sàn / trần luôn hướng về 0)
Math.round
cha cha, thực sự trơn tru ... (đi về phía gần nhất)
Chúng ta đi làm đi! (⌐ □ _ □)
Ở bên trái ... Math.floor
Đưa nó trở lại ngay bây giờ ... --
Hai bước nhảy lần này ...-=2
Mọi người vỗ tay
Làm thế nào thấp bạn có thể đi? Bạn có thể xuống thấp? 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 loại bỏ phần dương hoặc phần âm, bạn luôn hướng về 0.
Chúng có chức năng tương đương với số dương. Sự khác biệt là cách họ xử lý 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: - Phương pháp Math.Floor - Phương pháp Math.Truncate
PS Cẩn thận với Math.Round nó có thể không phải là những gì bạn mong đợi.
Để có được kết quả làm tròn "chuẩn", hãy sử dụng:
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
Hãy thử điều này, Ví dụ:
Math.Floor () vs 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 ra 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
math.floor()
Trả về số nguyên lớn nhất nhỏ hơn hoặc bằng số đã chỉ định. MSDN system.math.floor
math.truncate()
Tính phần tích phân của một số. MSDN system.math.truncate
Math.Floor()
làm tròn "hướng tới vô cực tiêu cực" tuân thủ theo tiêu chuẩn IEEE 4 754 .
Math.Truncate()
làm tròn "đến số nguyên gần nhất về không."
Math.Floor()
: Trả về số nguyên lớn nhất nhỏ hơn hoặc bằng số dấu phẩy động có độ chính xác kép được chỉ định.
Math.Round()
: Làm tròn một giá trị cho số nguyên gần nhất hoặc với số chữ số phân số đã chỉ định.
Floor()
và Truncate()
, không Floor()
và Round()
.
Cắt ngắn số thập phân ****