2012-05-16 53 views
40

Tôi có một chuỗi như 000000000100, mà tôi muốn chuyển đổi thành 1.00 và ngược lại.Cách định dạng chuỗi thành tiền

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

tôi cung cấp thêm ví dụ:

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

Dưới đây là đoạn code tôi đang cố gắng, nó được đem lại cho tôi kết quả mà không cần chữ số thập phân:

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

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

Trả lời

42

Chuyển đổi chuỗi đến một chữ số thập phân sau đó chia nó bằng 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à chuyển sang thập phân để thay thế.

+1

bạn không có nghĩa là "/ 100"? –

+0

Ha yeh, woops .... thanks! – ThePower

+3

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

1

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

19

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

EX:

string myValue = "000000001000"; 

decimal moneyvalue = 1921.39m; 
string moneyValue = String.Format("{0:C}", moneyvalue); 
2
//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"); 
4
string s ="000000000100"; 
    decimal iv = 0; 
    decimal.TryParse(s, out iv); 
    Console.WriteLine((iv/100).ToString("0.00")); 
+0

Bạn không bao giờ nên sử dụng 'float' hoặc' double' để biểu thị tiền tệ. –

+0

@JonGrant, cảm ơn tôi đã chỉnh sửa nó – Habib

0

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

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 các ký hiệu tiền tệ, tôi đã đã sử dụng "f2" thay vì "C"

0

thử

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

mà không loại bỏ các số 0 đầu. Nếu bạn đang đi xuống các tuyến đường thao tác chuỗi đơn giản, bạn sẽ cần phải thêm .Trim ("0". ToCharArray()) vào cuối mã của bạn –

+0

Sai lầm của tôi, tôi có nghĩa là anh ta nên đặt mã của tôi sau – Pera

+1

của bạn Bạn luôn có thể chỉnh sửa câu trả lời của bạn để cải thiện hoặc làm rõ. – RThomas

1

bạn cũng có thể làm:

string.Format("{0:C}", amt) 
16

Nó hoạt động!

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

Output

Order Total: $1,921.39 
+0

Nếu tôi phải loại bỏ ký hiệu đô la thì sao? –

1

Một khi bạn có chuỗi của bạn trong một đôi/thập phân để có được nó vào định dạng chính xác cho một miền địa phương cụ thể sử dụng

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 
+0

'GetCultureInfo' dường như không tồn tại trong UWP. – visc

2

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

này
var amtf = $"{Convert.ToDecimal(amt):#0.00}"; 
9
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 

điều khiển đầu ra:

+0

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

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