Cách định dạng chuỗi thành tiền


82

Tôi có một chuỗi giống như vậy 000000000100, tôi muốn chuyển đổi thành 1,00 và ngược lại.

Số 0 đứng đầu sẽ bị xóa, hai chữ số cuối cùng là số thập phân.

Tôi đưa ra thêm ví dụ:

000000001000 <=> 10.00
000000001005 <=> 10.05
000000331150 <=> 3311.50

Dưới đây là mã tôi đang thử, nó cho tôi kết quả không có số thập phân:

amtf = string.Format("{0:0.00}", amt.TrimStart(new char[] {'0'}));

1
Đối với chiều ngược lại, hãy nhân với 100 và sử dụng PadLeft(12,'0')chuỗi
— V4Vendetta

Câu trả lời:


76

Chuyển chuỗi thành số thập phân rồi chia cho 100 và áp dụng chuỗi định dạng tiền tệ:

string.Format("{0:#.00}", Convert.ToDecimal(myMoneyString) / 100);

Đã chỉnh sửa để xóa ký hiệu tiền tệ theo yêu cầu và thay vào đó chuyển đổi sang số thập phân.


3
và bạn nhận được biểu tượng tiền tệ miễn phí :) đơn giản hơn để sử dụng0:#.00
— V4Vendetta

@ThePower Cảm ơn, nhưng 'C' sẽ chuyển đổi thành tiền tệ, điều này sẽ trả về dấu $.
— Alvin

7
Bạn không bao giờ nên sử dụng floathoặc doubleđể đại diện cho tiền tệ.
— Jon Grant

2
Tại sao không sử dụng double hoặc float? Xem tại đây: stackoverflow.com/questions/3730019/…
— Dov Miller

3
Bạn không nên sử dụng "F2" thay vì "# .00"?
— Paul Groke

57

trước tiên bạn sẽ cần chuyển nó thành số thập phân, sau đó định dạng nó bằng định dạng tiền.

VÍ DỤ:

decimal decimalMoneyValue = 1921.39m;
string formattedMoneyValue = String.Format("{0:C}", decimalMoneyValue);

một ví dụ hoạt động: https://dotnetfiddle.net/soxxuW


43
decimal value = 0.00M;
value = Convert.ToDecimal(12345.12345);
Console.WriteLine(value.ToString("C"));
//OutPut : $12345.12
Console.WriteLine(value.ToString("C1"));
//OutPut : $12345.1
Console.WriteLine(value.ToString("C2"));
//OutPut : $12345.12
Console.WriteLine(value.ToString("C3"));
//OutPut : $12345.123
Console.WriteLine(value.ToString("C4"));
//OutPut : $12345.1234
Console.WriteLine(value.ToString("C5"));
//OutPut : $12345.12345
Console.WriteLine(value.ToString("C6"));
//OutPut : $12345.123450

Đầu ra bảng điều khiển:


Điều này sẽ tôn trọng đúng mức sự khác biệt của văn hóa. Sự khác biệt về văn hóa không chỉ có thể thay đổi biểu tượng, mà cả các dấu phân cách chữ số (và về mặt lý thuyết là vị trí của ký hiệu tiền tệ). msdn.microsoft.com/en-us/library/syy068tk(v=vs.90).aspx
— Robear

22

Nó hoạt động!

decimal moneyvalue = 1921.39m; 
string html = String.Format("Order Total: {0:C}", moneyvalue); 
Console.WriteLine(html);

Đầu ra

Order Total: $1,921.39

2
Nếu tôi phải xóa ký hiệu đô la thì sao?
— Paris Qian Sen

12

Sau khi bạn có chuỗi của mình ở dạng kép / thập phân để đưa nó vào định dạng chính xác cho việc sử dụng ngôn ngữ cụ thể

double amount = 1234.95;

amount.ToString("C") // whatever the executing computer thinks is the right fomat

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ie"))    //  €1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("es-es"))    //  1.234,95 € 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-GB"))    //  £1,234.95 

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-au"))    //  $1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-us"))    //  $1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ca"))    //  $1,234.95

GetCultureInfodường như không tồn tại trong UWP.
— visc

4
    string s ="000000000100";
    decimal iv = 0;
    decimal.TryParse(s, out iv);
    Console.WriteLine((iv / 100).ToString("0.00"));

Bạn không bao giờ nên sử dụng floathoặc doubleđể đại diện cho tiền tệ.
— Jon Grant,

4

Hãy thử đơn giản như thế này

 var amtf = $"{Convert.ToDecimal(amt):#0.00}";

3
//Extra currency symbol and currency formatting: "€3,311.50":
String result = (Decimal.Parse("000000331150") / 100).ToString("C");

//No currency symbol and no currency formatting: "3311.50"
String result = (Decimal.Parse("000000331150") / 100).ToString("f2");


1

Phân tích cú pháp chuỗi của bạn thành số thập phân trước.


0

Hãy thử một cái gì đó như sau:

decimal moneyvalue = 1921.39m;
string html = String.Format("Order Total: {0:C}", moneyvalue);
Console.WriteLine(html);

0
var tests = new[] {"000000001000", "000000001005", "000000331150"};
foreach (var test in tests)
{
    Console.WriteLine("{0} <=> {1:f2}", test, Convert.ToDecimal(test) / 100);
}

Vì bạn không yêu cầu ký hiệu tiền tệ nên tôi đã sử dụng "f2" thay vì "C"


0

thử

amtf =  amtf.Insert(amtf.Length - 2, ".");

điều đó không loại bỏ các số không ở đầu. Nếu bạn đang đi xuống lộ trình thao tác chuỗi đơn giản, bạn sẽ cần thêm .Trim ("0" .ToCharArray ()) vào cuối mã của bạn
— Antony Scott
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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.