2009-03-30 63 views
5

Tôi muốn biết cách dễ nhất để định dạng chuỗi thành kiểu kế toán. Tôi biết cách định dạng tiền tệ bằng cách sử dụng {0: c} nhưng có một số khác biệt trong kiểu kế toán, ví dụ, tất cả các ký hiệu đô la sẽ xếp hàng cũng như tất cả các dấu thập phân và âm được biểu thị trong dấu ngoặc đơn chứ không phải với "-" dấu trừ. Bạn có thể tìm thấy một ví dụ tốt về cách tôi muốn nó trong excel nếu bạn định dạng các tế bào là "kế toán" với 2 chữ số thập phân.Định dạng chuỗi kiểu kế toán trong ASP.NET

Trả lời

4

Bỏ qua các yêu cầu liên kết của bạn, bạn có thể sử dụng

number.ToString("€#,##0.00;(€#,##0.00);Zero") 

với khung số âm.

Để căn chỉnh các số của bạn, bạn phải định dạng mà không có ký hiệu tiền tệ và tự dán các số được định dạng bằng dấu cách, sử dụng phông chữ có chiều rộng cố định sẽ giúp công việc này dễ dàng hơn cho bạn.

EDIT:

Dường String.Format là bạn của bạn:

String.Format("{0,15:#,##0.00 ;(#,##0.00);- }", number) 

nơi 15 là tổng chiều rộng của đầu ra, và bạn cần phải nối thêm văn bản này để ký hiệu tiền tệ của bạn. (Một lần nữa, điều này gắn trong chỉ có chiều rộng cố định)

3

Không có phím tắt chuỗi định dạng (các ký tự đơn lẻ có quy tắc mặc định) để xử lý định dạng kiểu kế toán (here's a cheat sheet with the available format strings), do đó bạn sẽ phải viết một kiểu cụ thể hơn (như câu trả lời của Patrick) hoặc phương pháp phân tích cú pháp của riêng bạn.

Yêu cầu căn chỉnh sẽ cụ thể cho cách bạn hiển thị chúng. Tôi giả sử bạn đang sử dụng một bảng, trong trường hợp đó bạn bị giới hạn bởi những gì HTML hỗ trợ, và nó không hỗ trợ các kiểu sắp xếp kiểu kế toán như Excel.

+0

+1 - Tôi vừa tìm kiếm danh sách các chuỗi định dạng có thể in được –

+0

Ya, đạo cụ trên đó! –

+1

Có bản cập nhật cho liên kết đó Ông Sheehan? –

1

Trong this blog có một số định dạng khác nhau vạch ra và điều này dường như được gần gũi với những gì bạn đang tìm kiếm:

int neg = -10; 
int pos = 10; 
// C or c (Currency): It represent how many decimal place of zeros to show. 
String.Format("{0:C4}", pos);  //"$10.0000" 
String.Format("{0:C4}", neg);  //"($10.0000)" 

Nó không xử lý đệm (bạn có thể phải tự khắc phục), nhưng nó có dấu ngoặc đơn thích hợp.

+0

Đây là văn hóa cụ thể và có thể không hoạt động với mọi nền văn hóa. –

1

Bạn có thể làm điều gì đó bằng cách sử dụng biến thể của phương pháp Patricks. Điều này sẽ xử lý các định dạng và liên kết giả sử bạn biết trên ràng buộc như thế nào lớn một giá trị mà bạn đang đối phó với:

private static string OutputAsCur(decimal val) 
{ 
    string format = " #,##0.00 ; (#,##0.00);Zero"; 
    string frmt = val.ToString(format); 
    return CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol + frmt.PadLeft(15, ' '); 
} 

Dưới đây là một ứng dụng ví dụ đơn giản để xem nó định dạng:

static void Main(string[] args) 
    { 
     decimal d = 155.55m; 

     Console.WriteLine(OutputAsCur(d)); 
     Console.WriteLine(OutputAsCur(d * -1)); 
     Console.WriteLine(OutputAsCur(1002.32m)); 
     Console.WriteLine(OutputAsCur(1002.32m * -1)); 
     Console.ReadLine(); 
    } 
0

Bạn có thể sử dụng một định dạng chuỗi cho String.Format để có được những gì bạn đang cố gắng để thực hiện. Bí quyết duy nhất là số dương, vì chúng sẽ không có dấu ngoặc đơn đóng, sẽ phải kết hợp một khoảng trống ở cuối nếu chúng sẽ được căn chỉnh với bất kỳ số âm nào sẽ nằm trong cột. Bí quyết là để có được không gian đó vào chuỗi theo cách HTML sẽ không bỏ qua. Tôi chỉ cần sử dụng thực thể HTML & nbsp; cho biết một không gian không phá vỡ trong HTML.

Đây là mã mẫu. Đầu tiên, trong aspx.

<table> 
... 
    <tr> 
     <th scope="row" colspan="2">Total Revenue</th> 
     <td class="numeric total"><asp:Label runat="server" ID="TotalRevenueLabel" /></td> 
    </tr> 
... 
</table> 

Bây giờ, codebehind.

public const string kMoneyFormat = "#,#.00'&nbsp;';(#,#.00);'-.--&nbsp;'"; 

public void DataBind() 
{ 
    using (FinancialDataContext sql = new FinancialDataContext()) 
    { 
     var periodQuery = from m in sql.Forecasts() 
          select m; 
     ForecastsResult periodData = periodQuery.Single(); 
     decimal totalRevenue = period.Data.income_actual.Value + periodData.other_income.Value; 
     TotalRevenueLabel.Text = totalRevenue.ToString(kMoneyFormat); 
    } 
} 
0

Tôi đã làm theo các bước sau để áp dụng định dạng "Kế toán".

  • Trong Sách mới trên Excel, chọn một ô.
  • Chèn dữ liệu (ví dụ: bất kỳ số nào; ví dụ này, thêm 80000).
  • Chọn (Kế toán) NumberFormat như được hiển thị trong hình # 1:

Ảnh chụp màn hình # 1:

Screenshot 1

  • Chọn "Định dạng Số Khác".
  • Chọn "Tùy chỉnh".
  • Chọn bất kỳ công thức nào được xác định trước (xem ảnh chụp màn hình số 2).

Ảnh chụp màn hình # 2:

Screenshot 2

Trong trường hợp của tôi, đây là định dạng mong muốn cho con số này.


Các tiêu cực phụ của điều này là khi bạn chọn các tế bào với các định dạng được áp dụng trên nó, bạn sẽ không thấy được lựa chọn (Kế toán) "trong DropDownList" Số Format.

Các vấn đề liên quan