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

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.


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


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:


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

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

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

Sie sollten niemals Währung verwenden floatoder doubledarstellen.
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");


1

Analysieren Sie Ihre Zeichenfolge zuerst auf eine Dezimalstelle.


0

Versuchen Sie so etwas:

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 nach dem Währungssymbol gefragt haben, habe ich "f2" anstelle von "C" verwendet.


0

Versuchen

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

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,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.