2010-11-25 14 views
3

Ich muss Dezimalgeld Wert als Zeichenfolge anzeigen, wo Dollar und Cent mit Text dazwischen getrennt sind.Wie konvertiert man den Dezimalwert in einen Stringwert für Dollars und Cents, die in C# getrennt sind?

123.45 => "123 Lt 45 ct" 

Ich kam mit folgenden Lösung:

(value*100).ToString("#0 Lt 00 ct"); 

Diese Lösung hat jedoch zwei Nachteile:

  1. Auf diese Lösung zu einem Kollegen Programmierer zeigt, scheint es nicht intuitiv zu sein und erfordert einige Erklärungen.
  2. Cent werden immer als zwei Ziffern angezeigt. (Nicht wirklich ein Problem für mich, wie derzeit das ist, wie ich es angezeigt werden muss.)

Gibt es alternative elegante und einfache Lösung?

Antwort

0

hatte ich einige Fehler mit der akzeptierten Antwort oben (es mein Ergebnis einen Cent fallen würde)

Hier ist meine Korrektur

double val = 125.79; 
double roundedVal = Math.Round(val, 2); 
double dollars = Math.Floor(roundedVal); 
double cents = Math.Round((roundedVal - dollars), 2) * 100; 
8

Dies ist eine ziemlich einfache Operation. Es sollte so gemacht werden, dass Ihre Mitprogrammierer sofort verstehen. Deine Lösung ist ziemlich clever, aber Klugheit ist hier nicht nötig. =)

Verwenden etwas Ausführlich wie

double value = 123.45; 
int dollars = (int)value; 
int cents = (int)((value - dollars) * 100); 
String result = String.Format("{0:#0} Lt {1:00} ct", dollars, cents); 
+0

der Tat wird ein String.Format hier ganz gut tun, und es ist einfach zu lesen und zu verstehen. – Jens

+1

Ich würde gerne Jens machen und dann diese als Erweiterung für Decimal hinzufügen. Also hast du decimalValue.ToDollarAndCentString(); oder ähnlich ... – ThorHalvor

+0

Mein erster Versuch war genau wie Jens, dann dachte ich an eine "elegantere" Lösung (die ich in meiner Frage gepostet habe), aber ich hoffte nur, dass es anders gehen könnte. Sieht so aus, als müsste ich bei diesem bleiben. Vielen Dank. – Domas

0

Dies könnte ein wenig übertrieben sein:

decimal value = 123.45M; 

int precision = (Decimal.GetBits(value)[3] & 0x00FF0000) >> 16; 
decimal integral = Math.Truncate(value); 
decimal fraction = Math.Truncate((decimal)Math.Pow(10, precision) * (value - integral)); 

Console.WriteLine(string.Format("{0} Lt {1} ct", integral, fraction)); 

Das Format der Dezimalzahl binären Darstellung wird dokumentiert here.

Verwandte Themen