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.Floorlàm tròn xuống, làm Math.Ceilingtròn lên và làm Math.Truncatetròn về không. Vì vậy, Math.Truncategiống như Math.Floorcho số dương, và thích Math.Ceilingcho số âm. Đây là tài liệu tham khảo .
Để đầy đủ, làm Math.Roundtrò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)myDoublekhá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 Roundnó 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
evennhư 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.floorsliiiide bên trái ...
Math.ceilsliiiide bên phải ...
Math.truncatecriiiiss 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 ****