Định dạng nổi đến 2 chữ số thập phân


210

Tôi hiện đang xây dựng một mô-đun bán hàng cho một trang web của khách hàng. Cho đến nay tôi đã có giá bán để tính toán hoàn hảo nhưng nơi tôi gặp khó khăn là định dạng đầu ra thành 2 chữ số thập phân.

Tôi hiện đang gọi đây là một biến để dữ liệu có thể liên kết các kết quả với một listview.

Sale = float.Parse(((x.Sale_Price - (x.Sale_Price * (x.Discount_Price / 100))).ToString())),

Bất cứ ai có thể chỉ cho tôi làm thế nào để định dạng đầu ra đến 2 chữ số thập phân ?? Cảm ơn nhiều!


Kiểm tra điều này tôi không chắc nhưng có thể nó sẽ hoạt động ToString ("#. ##");
Syeda

Câu trả lời:


467

Bạn có thể truyền định dạng cho ToStringphương thức, ví dụ:

myFloatVariable.ToString("0.00"); //2dp Number

myFloatVariable.ToString("n2"); // 2dp Number

myFloatVariable.ToString("c2"); // 2dp currency

Chuỗi định dạng số chuẩn


38
"N2" và "C2" sẽ thêm hàng nghìn dấu phân cách trong khi "0,00" sẽ không.
Marc K

5
Chỉ trong trường hợp bạn không chắc chắn (tôi đã), tất cả những cách này để định dạng giá trị nổi sẽ cung cấp làm tròn.
RenniePet

46

Điều đầu tiên bạn cần làm là sử dụng decimalloại thay vì floatgiá cả. Việc sử dụng floatlà hoàn toàn không thể chấp nhận được vì điều đó không thể biểu thị chính xác hầu hết các phân số thập phân.

Một khi bạn đã làm điều đó, Decimal.Round()có thể được sử dụng để làm tròn đến 2 nơi.


36

String.Format("{0:#,###.##}", value)

Một ví dụ phức tạp hơn từ Định dạng chuỗi trong C # :

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);

Điều này sẽ tạo ra $ 1,240,00 “nếu vượt qua 1243,50. Nó sẽ xuất ra định dạng tương tự nhưng trong ngoặc đơn nếu số đó là số âm và sẽ xuất chuỗi Chuỗi Zero Zero nếu số đó bằng không.



4
string outString= number.ToString("####0.00");

1
Có khác nhau giữa "0" và "#" trong định dạng tùy chỉnh. "0": Thay thế số 0 bằng chữ số tương ứng nếu có; mặt khác, zero xuất hiện trong chuỗi kết quả. "#": Thay thế biểu tượng "#" bằng chữ số tương ứng nếu có; mặt khác, không có chữ số xuất hiện trong chuỗi kết quả. Tham khảo
劉鎮

3

Như đã đề cập, bạn sẽ cần sử dụng một kết quả được định dạng; đó là tất cả thực hiện thông qua Write(), WriteLine(), Format(), và ToString()phương pháp.

Điều chưa được đề cập là Định dạng điểm cố định cho phép số lượng vị trí thập phân được chỉ định. Nó sử dụng 'F' và số theo sau 'F' là số vị trí thập phân được xuất ra, như trong các ví dụ.

Console.WriteLine("{0:F2}", 12);    // 12.00 - two decimal places
Console.WriteLine("{0:F0}", 12.3);  // 12 - ommiting fractions

2

Điều này là cho các trường hợp mà bạn muốn sử dụng các chuỗi nội suy . Tôi thực sự đăng bài này vì tôi mệt mỏi với bản dùng thử và lỗi và cuối cùng cuộn qua hàng tấn tài liệu mỗi khi tôi cần định dạng một số vô hướng.

$"{1234.5678:0.00}"        "1234.57"        2 decimal places, notice that value is rounded
$"{1234.5678,10:0.00}"     "   1234.57"     right-aligned
$"{1234.5678,-10:0.00}"    "1234.57   "     left-aligned
$"{1234.5678:0.#####}"     "1234.5678"      5 optional digits after the decimal point
$"{1234.5678:0.00000}"     "1234.56780"     5 forced digits AFTER the decimal point, notice the trailing zero
$"{1234.5678:00000.00}"    "01234.57"       5 forced digits BEFORE the decimal point, notice the leading zero
$"{1234.5612:0}"           "1235"           as integer, notice that value is rounded
$"{1234.5678:F2}"          "1234.57"        standard fixed-point
$"{1234.5678:F5}"          "1234.56780"     5 digits after the decimal point, notice the trailing zero
$"{1234.5678:g2}"          "1.2e+03"        standard general with 2 meaningful digits, notice "e"
$"{1234.5678:G2}"          "1.2E+03"        standard general with 2 meaningful digits, notice "E"
$"{1234.5678:G3}"          "1.23E+03"       standard general with 3 meaningful digits
$"{1234.5678:G5}"          "1234.6"         standard general with 5 meaningful digits
$"{1234.5678:e2}"          "1.23e+003"      standard exponential with 2 digits after the decimal point, notice "e"
$"{1234.5678:E3}"          "1.235E+003"     standard exponential with 3 digits after the decimal point, notice "E"
$"{1234.5678:N2}"          "1,234.57"       standard numeric, notice the comma
$"{1234.5678:C2}"          "$1,234.57"      standard currency, notice the dollar sign
$"{1234.5678:P2}"          "123,456.78 %"   standard percent, notice that value is multiplied by 100
$"{1234.5678:2}"           "2"              :)

Cảnh báo hiệu suất

Chuỗi nội suy là chậm. Theo kinh nghiệm của tôi, đây là thứ tự (nhanh đến chậm):

  1. value.ToString(format)+" blah blah"
  2. string.Format("{0:format} blah blah", value)
  3. $"{value:format} blah blah"
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.