So formatieren Sie Zeichenfolgen in Geld

83

Ich habe einen String wie 000000000100den ich in 1.00 konvertieren möchte und umgekehrt.

Die führende Null wird entfernt, die letzten beiden Ziffern sind die Dezimalstellen.

Ich gebe mehr Beispiel:

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

Unten ist der Code, den ich versuche. Er gibt mir ein Ergebnis ohne Dezimalzahl:

amtf = string.Format("{0:0.00}", amt.TrimStart(new char[] {'0'}));
Alvin
quelle
1
PadLeft(12,'0')
Umgekehrt

Antworten:

76

Konvertieren Sie die Zeichenfolge in eine Dezimalzahl, teilen Sie sie durch 100 und wenden Sie die Zeichenfolge im Währungsformat an:

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

Bearbeitet, um das Währungssymbol wie gewünscht zu entfernen und stattdessen in eine Dezimalzahl umzuwandeln.

Lloyd Powell
quelle
3
und Sie erhalten das Währungssymbol kostenlos :) einfacher zu bedienen0:#.00
V4Vendetta
@ThePower Danke, aber 'C' wird in eine Währung konvertiert, die ein $ -Zeichen zurückgibt.
Alvin
7
Sie sollten niemals Währung verwenden floatoder doubledarstellen.
Jon Grant
2
Warum nicht Double oder Float verwenden? Siehe hier: stackoverflow.com/questions/3730019/…
Dov Miller
3
Sollten Sie nicht "F2" anstelle von "# .00" verwenden?
Paul Groke
58

Sie müssen es zuerst in eine Dezimalzahl konvertieren und dann im Geldformat formatieren.

EX:

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

Ein funktionierendes Beispiel: https://dotnetfiddle.net/soxxuW

Mohammed Swillam
quelle
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

Konsolenausgabe:

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

Es klappt!

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

Ausgabe

Order Total: $1,921.39
Jorge Luis Peña Lopez
quelle
2
Was ist, wenn ich das Dollarzeichen entfernen muss?
Paris Qian Sen
12

Sobald Sie Ihre Zeichenfolge in einer Doppel- / Dezimalzahl haben, um sie in die richtige Formatierung für ein bestimmtes Gebietsschema zu bringen

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
Aaron Sherman
quelle
GetCultureInfoscheint in UWP nicht zu existieren.
visc
4
    string s ="000000000100";
    decimal iv = 0;
    decimal.TryParse(s, out iv);
    Console.WriteLine((iv / 100).ToString("0.00"));
Habib
quelle
Sie sollten niemals Währung verwenden floatoder doubledarstellen.
Jon Grant
4

Versuchen Sie es einfach so

 var amtf = $"{Convert.ToDecimal(amt):#0.00}";
Himmel König
quelle
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");
Piotr Justyna
quelle
2

Sie können auch tun:

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

Analysieren Sie Ihre Zeichenfolge zuerst auf eine Dezimalstelle.

greijner
quelle
0

Versuchen Sie so etwas:

decimal moneyvalue = 1921.39m;
string html = String.Format("Order Total: {0:C}", moneyvalue);
Console.WriteLine(html);
der Barkeeper
quelle
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 nach dem Währungssymbol gefragt haben, habe ich "f2" anstelle von "C" verwendet.

Antony Scott
quelle
0

Versuchen

amtf =  amtf.Insert(amtf.Length - 2, ".");
Pera
quelle
das entfernt nicht die führenden Nullen. Wenn Sie den einfachen Weg der Zeichenfolgenmanipulation beschreiten, müssen Sie .Trim ("0" .ToCharArray ()) am Ende Ihres Codes hinzufügen
Antony Scott,