2010-01-18 50 views
9

Tôi có giá trị thập phân 18.8. Các giá trị được lưu trữ trong biến này có thể thuộc bất kỳ loại nào. Ví dụ: nó có thể là 1.0000000 hoặc 1.00004000 hoặc 5.00000008. Tôi muốn viết một phương thức để tôi có thể chuyển số thập phân cho nó và nhận chuỗi được làm tròn lên. Điều này sẽ không là vấn đề nếu tôi biết những nơi thập phân mà tôi muốn nhận được. Nhưng những gì tôi muốn nhận được là:Cách tốt nhất aproach làm tròn số thập phân trong C#

Khi đó là 1,0000000, nó phải trả lại 1.
Nếu đó là 1.00004000 thì phải trả 1,00004.
Khi đó là 5.00000008, nó sẽ trả về 5.00000008. Vì vậy, về cơ bản nó sẽ tìm thấy tất cả 0 được đằng sau chữ số cuối cùng khác nhau sau đó 0 và cắt nó đi.

Tôi nên sử dụng nó như thế nào? Phương pháp tốt nhất là gì? Tôi nhận được giá trị này từ SQL và đặt nó trong biến thập phân nhưng sau đó tôi muốn hiển thị nó và có 5.0000000 khi nó có thể được hiển thị như 5 là một chút overkill cho tôi.

Hy vọng tôi có thể nhận được một số đề xuất hay.

Với regards,

MadBoy

Trả lời

9

AFAIK, ToString ("0. ##") sẽ làm, chỉ cần tăng số lượng # để giá trị của bạn sẽ không làm tròn lên. Ví dụ:

decimal d = 1.999m; 
string dStr = d.ToString("0.###"); 

Điều này sẽ tạo ra chuỗi "1,999" (dấu tách phụ thuộc vào văn hóa được sử dụng).

Do đó, bạn có thể sử dụng chuỗi định dạng rất dài phổ biến: "0.############################" - để định dạng tất cả các giá trị của mình.

+0

Tôi không biết số lượng chữ số thập phân tôi cần. Điều này sẽ làm việc nếu tôi biết rằng tôi muốn cắt nó sau 3 chữ số trở lên. Nhưng tôi muốn cắt nó chỉ khi tất cả các chữ số là số không sau số không cuối cùng. – MadBoy

+1

Nếu bạn có 1.00004000, sau đó sau ToString ("0. #####################") bạn sẽ có "1.00004". Nói về MAX của # dấu hiệu: nó là 28. Thập phân cho phép tối đa 28-29 chữ số có nghĩa. Điều này làm cho 1 cho số 0 và 28 cho các dấu hiệu khác. Ngay cả khi bạn có smth như 15555.98900008900 nó sẽ là ok. – terR0Q

+0

Cảm ơn, nó hoạt động. Tôi nên thử nghiệm nó trước khi nghi ngờ nó sẽ hoạt động như bạn đã nói. – MadBoy

2

Vì vậy hãy cắt các số 0 từ cuối.

decimal d = 1.999m; 
string dStr = d.ToString().TrimEnd('0').TrimEnd('.'); 
+0

Và nếu có giá trị 1.000.000,00? Sau đó, ông mất tất cả số không của tôi giả sử? Hoặc vẫn còn "1.000.000". – Webleeuw

+1

Anh ta chỉ mất số 0 sau dấu chấm (.) Có dấu chấm, nhưng anh ta chỉ có thể thêm một số khác 'TrimEnd ('. ') '. Đối với I18N, anh ta không nên sử dụng dấu chấm, mà là dấu tách riêng của văn hóa. – Scoregraphic

1

Bạn cũng có thể sử dụng string.Formathere's tài liệu của các định dạng khác nhau càng tốt nhưng tôi thích Johan Sheehans hơn cheat sheet như một tham khảo nhanh.

decimal number=4711.00004711m; 
4711.00004711 
string.Format("{0:0.#############}",number); 
"4711,00004711" 
number=42; 
42 
string.Format("{0:0.#############}",number); 
"42" 
Các vấn đề liên quan