Vòng đôi ở hai vị trí thập phân trong C #?


258

Tôi muốn làm tròn giá trị gấp đôi ở hai vị trí thập phân trong c # làm thế nào tôi có thể làm điều đó?

double inputValue = 48.485;

sau khi làm tròn

inputValue = 48.49;

Liên quan: c # - Làm cách nào để làm tròn một giá trị thập phân đến 2 vị trí thập phân (cho đầu ra trên một trang)


Lưu ý rằng bạn không thể biểu thị tất cả các giá trị dấu phẩy động bằng cách sử dụng gấp đôi và điều này có thể khiến bạn tăng tốc khi làm tròn
Liam

Câu trả lời:


479

Những công việc này:

inputValue = Math.Round(inputValue, 2);

cách giải quyết cho trunc float: float myTruncFloat = float.Pude (Math.Round (myFloat, 2) .ToString ());
Piero Alberto

1
Nếu giá trị là 48.0000. Nó sẽ không kết quả 48,00. đầu vào képValue = 48,00; inputValue = Math.Round (inputValue, 2); sẽ kết quả 48 thôi. Bất kỳ warkaound?
dùng1926138

100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

4
Đây thực sự là những gì nên được sử dụng. Hầu hết các hoạt động trong ngân hàng, vv được thực hiện bằng phương pháp này (MidpointRounding.AwayFromZero).
MadBoy

41
đề xuất rằng các ngân hàng sử dụng gấp đôi là anh chàng đáng sợ, đừng sử dụng các giá trị gần đúng cho tiền tệ.
raggi

6
@raggi Tôi sợ một số (ngân hàng) làm ... Điều đó sẽ giải thích rất nhiều thứ
SparK

4
Có, tôi tin rằng đây là những gì bộ phim 'Office Space' được thực hiện sau khi làm tròn các phân số xu mà không ai có thể nhận ra. Điểm tốt để cẩn thận khi sử dụng làm tròn tùy ý.
atconway

1
Và như một phần của cốt truyện của một trong những bộ phim Superman gốc đã xuất hiện từ lâu.
James Westgate

25

Bạn nên sử dụng

inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

Toán học

Math.Round làm tròn một giá trị dấu phẩy động có độ chính xác kép đến một số chữ số phân số đã chỉ định.

MidpointRounding

Chỉ định cách các phương pháp làm tròn toán học nên xử lý một số nằm giữa hai số.

Về cơ bản, hàm trên sẽ lấy giá trị đầu vào của bạn và làm tròn nó thành 2 (hoặc bất kỳ số nào bạn chỉ định) vị trí thập phân. Với MidpointRounding.AwayFromZerokhi một số nằm giữa hai số khác, nó được làm tròn về phía số gần nhất nằm cách 0. Ngoài ra còn có một tùy chọn khác mà bạn có thể sử dụng các vòng đó theo số chẵn gần nhất.


25

Một cách dễ dàng khác là sử dụng ToString với một tham số. Thí dụ:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

Kết quả:

54.97

19

Sử dụng Math.Round

value = Math.Round(48.485, 2);

Đánh bại tôi với nó (mặc dù tôi cũng sẽ thêm dấu chấm phẩy ở đó;))
Reed Copsey

1
Tuy nhiên, hãy cẩn thận với MidpointRounding: "Nếu giá trị của chữ số đầu tiên có giá trị ở bên phải của vị trí thập phân chữ số là 5, chữ số ở vị trí chữ số được làm tròn nếu là số lẻ hoặc không thay đổi nếu là số chẵn"
Matthias

8

bạn có thể thử một từ bên dưới. Có nhiều cách cho việc này.

1. 
 value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
2.
 inputvalue=Math.Round(123.4567, 2)  //"123.46"
3. 
 String.Format("{0:0.00}", 123.4567);      // "123.46"
4. 
string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568

Tôi đã sử dụng tùy chọn thứ tư. Viết F6 làm việc cho tôi tốt hơn là viết ra 6 số 0 ;-)
Maurice Klimek

2

Sử dụng một chuỗi nội suy, điều này tạo ra một chuỗi được làm tròn:

var strlen = 6;
$"{48.485:F2}"

Đầu ra

"48.49"
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.