2012-05-16 11 views
40

Ich habe eine Zeichenfolge wie 000000000100, die ich in 1,00 konvertieren möchte und umgekehrt.So formatieren Sie Zeichenfolge zu Geld

Null führen wird entfernen, zuletzt zweistellige das Dezimalsystem ist.

ich mehr Beispiel:

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

Unten ist der Code den ich versuche, es gibt mir ohne Dezimalergebnis:

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

Für die andere Art und Weise mehrfach rund um 100 und verwenden 'PadLeft (12, '0')' die Zeichenfolge – V4Vendetta

Antwort

42

die Zeichenfolge in eine Dezimalzahl konvertieren dann teilen sie durch 100 und wenden Sie die Währungsformatzeichenfolge an:

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

bearbeitet, um Währungssymbol wie angefordert zu entfernen und stattdessen in dezimal konvertieren.

+1

nicht wahr "/ 100" bedeuten? –

+0

Ha yeh, woops .... Vielen Dank! – ThePower

+3

und Sie erhalten das Währungssymbol kostenlos :) einfacher zu verwenden '0: #.00 ' – V4Vendetta

1

Parse auf Ihre Zeichenfolge in eine Dezimalzahl zuerst.

19

Sie müssen es in eine Dezimalzahl zuerst konvertieren, dann zu formatieren mit Geld-Format.

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

Sie sollten niemals 'float' oder' double' verwenden, um die Währung darzustellen. –

+0

@JonGrant dank ich bearbeiten es – Habib

0

Probieren Sie etwas wie folgt aus:

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

Da Sie nicht für das Währungssymbol gefragt habe, habe ich verwendet "f2" anstelle von "C"

0

versuchen

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

, die nicht die führenden Nullen nicht entfernt. Wenn Sie die einfache String-Manipulation Route hinunter bist würden Sie .Trim („0“ .ToCharArray()) bis zum Ende des Codes –

+0

Mein Fehler hinzufügen müssen, meinte ich, dass er meinen Code nach seinem – Pera

+1

setzen sollen Sie können immer Bearbeiten Sie Ihre Antwort, um sie zu verbessern oder zu klären. – RThomas

1

Sie auch tun können:

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

Es funktioniert!

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

Ausgabe

Order Total: $1,921.39 
+0

Was passiert, wenn ich das Dollarzeichen entfernen muss? –

1

Sobald Sie Ihren Text in einem Doppel-/dezimal haben es in die richtige Formatierung für ein bestimmtes Gebietsschema zu erhalten verwenden

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' scheint in UWP nicht zu existieren. – visc

2

einfachen Versuchen wie diese

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 

Console Ausgabe:

+0

Dieser wird Kulturvarianz richtig respektieren. Kulturelle Unterschiede können nicht nur das Symbol, sondern auch die Zifferntrennzeichen (und theoretisch die Position des Währungssymbols) verändern. https://msdn.microsoft.com/en-us/library/syy068tk(v=vs.90).aspx – Robear

Verwandte Themen