EDIT: Đã được chỉ ra rằng các phương pháp tiếp cận này vòng giá trị thay vì cắt ngắn. Thật khó để cắt ngắn giá trị double
vì nó không thực sự ở đúng cơ sở ... nhưng cắt ngắn giá trị decimal
là khả thi hơn.
Bạn nên sử dụng chuỗi định dạng phù hợp, hoặc là custom hoặc standard, ví dụ:
string x = d.ToString("0.00");
hoặc
string x = d.ToString("F2");
Nó có giá trị là nhận thức được rằng một giá trị gấp đôi bản thân không "biết" có bao nhiêu chữ số thập phân nó có. Nó chỉ khi bạn chuyển đổi nó thành một chuỗi mà nó thực sự có ý nghĩa để làm như vậy. Sử dụng Math.Round
sẽ nhận được giá trị gấp đôi gần nhất với x.xx00000
(nếu bạn thấy ý tôi) nhưng gần như chắc chắn sẽ không có giá trị chính xác x.xx00000
do cách thức các loại điểm động nhị phân hoạt động.
Nếu bạn cần điều này cho bất kỳ điều gì khác so với định dạng chuỗi, bạn nên cân nhắc sử dụng decimal
để thay thế. Giá trị thực sự đại diện cho điều gì?
Tôi có các bài viết trên binary floating point và decimal floating point trong .NET mà bạn có thể thấy hữu ích.
Nguồn
2009-09-15 12:26:41
gì nên kết quả khi bạn cung cấp cho 12,12890? – rahul
Những gì ** phoenix ** được hỏi là bạn có muốn làm tròn nó đến 12,13, hoặc chỉ cắt ngắn nó thành 12,12 ...? – awe
Có @awe. Thats right – rahul