Dize paraya nasıl biçimlendirilir


83

Ben gibi bir dize var 000000000100ben 1,00 ve tersi dönüştürmek istiyoruz.

Baştaki sıfır kaldırılacak, son iki rakam ondalıktır.

Daha fazla örnek veriyorum:

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

Aşağıda denediğim kod var, bana ondalıksız sonuç veriyor:

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

1
Diğer taraftan, 100 ile çarpın ve PadLeft(12,'0')dizeyi kullanın
V4Vendetta

Yanıtlar:


76

Dizeyi ondalık sayıya dönüştürün, ardından 100'e bölün ve para birimi biçimi dizesini uygulayın:

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

Para birimi sembolünü istendiği gibi kaldırmak ve bunun yerine ondalık sayıya dönüştürmek için düzenlendi.


3
ve para birimi simgesini ücretsiz olarak alırsınız :) kullanımı daha basit0:#.00
V4Vendetta

@ThePower Teşekkürler, ancak 'C' para birimine dönüşecek ve bu da bir $ işareti döndürecektir.
Alvin

7
Sen kullanmak asla floatveya doublepara birimini temsil etmek.
Jon Grant

2
Neden double veya float kullanmıyorsunuz? Buraya bakın: stackoverflow.com/questions/3730019/…
Dov Miller

3
"# .00" yerine "F2" kullanmanız gerekmez mi?
Paul Groke

58

önce bir ondalık sayıya dönüştürmeniz, ardından bunu para biçimiyle biçimlendirmeniz gerekir.

EX:

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

çalışan bir örnek: 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

Konsol çıkışı:


Bu, kültür varyansına uygun şekilde saygı gösterecektir. Kültürel farklılıklar sadece sembolü değil, rakam ayırıcıları da (ve teorik olarak para birimi sembolünün konumunu) değiştirebilir. msdn.microsoft.com/en-us/library/syy068tk(v=vs.90).aspx
Robear

22

İşe yarıyor!

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

Çıktı

Order Total: $1,921.39

2
Dolar işaretini kaldırmam gerekirse ne olur?
Paris Qian Sen

12

Belirli bir yerel kullanım için doğru biçimlendirmeye almak için dizenizi çift / ondalık olarak aldıktan sonra

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

GetCultureInfoUWP'de var gibi görünmüyor.
visc

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

Sen kullanmak asla floatveya doublepara birimini temsil etmek.
Jon Grant


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");

2

ayrıca şunları da yapabilirsiniz:

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


0

Bunun gibi bir şey dene:

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);
}

Para birimi simgesini istemediğiniz için "C" yerine "f2" kullandım


0

Deneyin

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

bu baştaki sıfırları kaldırmaz. Basit dize işleme yolundan aşağı gidiyorsanız, kodunuzun sonuna .Trim ("0" .ToCharArray ()) eklemeniz gerekir
Antony Scott,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.