Sử dụng Math.Floor nếu bạn muốn làm tròn xuống tha giá trị, hoặc Math.Round nếu bạn muốn để có được một chính xác vòng. Math.Truncate chỉ cần loại bỏ phần thập phân của số, vì vậy bạn sẽ có được kết quả xấu đối với số âm:
var result= Math.Floor(number * 100)/100;
Math.floor luôn trả về giá trị nhỏ nhất không thể thiếu đó là ít (Tầng) hoặc cao hơn (trần) so với giá trị được chỉ định. Vì vậy, bạn không nhận được một làm tròn chính xác. Ví dụ:
Math.Floor(1.127 * 100)/100 == 1.12 //should be 1.13 for an exact round
Math.Ceiling(1.121 * 100)/100 == 1.13 //should be 1.12 for an exact round
Luôn thích phiên bản Math.Round chứa thông số làm tròn giữa điểm. Tham số này chỉ định cách xử lý các giá trị điểm giữa (5) làm chữ số cuối cùng.
Nếu bạn không chỉ định AwayFromZero làm giá trị cho thông số, bạn sẽ nhận được hành vi mặc định, đó là ToEven. Ví dụ, sử dụng ToEven như làm tròn phương pháp, bạn nhận được:
Math.Round(2.025,2)==2.02
Math.Round(2.035,2)==2.04
thay vào đó, sử dụng MidPoint.AwayFromZero param:
Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03
Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04
Vì vậy, đối với một tròn bình thường, nó là tốt nhất để sử dụng mã này:
var value=2.346;
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero);
Bạn có muốn làm tròn số thập phân hoặc biểu diễn văn bản không? –
@Henk, tôi cần xuất giá trị dưới dạng văn bản, nhưng thay vì làm tròn trước khi xuất. Nó giống như giá trị sẽ phải nạp vào các calcs khác sau đó. –
có thể trùng lặp của [Làm tròn đôi thành 2 số có nghĩa sau dấu thập phân] (http: // stackoverflow.com/questions/2808535/round-a-double-to-2-number-figure-after-decimal-point) – ecatmur