2016-11-11 3 views
-2

Ich hoffe, die eleganteste Lösung (die geringste Menge an Code) für die Anforderung der Umwandlung einer Penny-Zeichenfolge in einen Dollar-Cent-Wert zu erhalten. Es muss die Cent (.00) darstellen, also ist das Teilen durch 100 nicht gerade. Zum Beispiel muss "00000600000" als "6000.00" dargestellt werden. Ich habe die folgenden Verfahren hergestellt:Was ist die beste Methode, um Dollar-Wert mit Cent aus einer Zeichenfolge zu erhalten?

value = Math.Abs(Int(Mid(Mid(line, 188, 11), 1, Len(Mid(line, 188, 11)) - 2))) & "." & Mid(Mid(line, 188, 11), Len(Mid(line, 188, 11)) - 1, 2) 

value = (Math.Abs(Int(Mid(line, 188, 11))).ToString).Insert(Math.Abs(Int(Mid(line, 188, 11))).ToString.Length - 2, ".") 

value = Math.Abs(Int(Mid(line, 188, 11))) : value = value.Insert(value.Length - 2, ".") 
+2

_ "eleganteste Lösung" _ ist subjektiv – MickyD

+0

"dividieren durch 100 ist nicht geradlinig" warum nicht? –

+0

Der Wert zeigt die Cents nicht als .00 –

Antwort

4
int cents = int.Parse(line); 
decimal dollars = cents/100m; 
string value = dollars.ToString("$#.00"); 

Oder, wenn Ihre Definition von elegant bedeutet "weniger Zeilen":

value = (int.Parse(line)/100m).ToString("$#.00"); 
+0

_technisch_ Sie könnten auch 'decimal.Parse' verwenden, die mehr Ziffern unterstützen würde. –

+1

Nach dem Scannen der Dokumentation für diese Funktion habe ich etwas wie ("#. ##") verwendet, um herauszufinden, ob es auf der Basis der Übereinstimmung funktioniert. Nachdem Sie mit ("$ #. 00" geantwortet haben) fragte ich mich, ob ich das Dollarzeichen sonst weglassen müsste, aber einfach ("# .00") funktioniert! –

0

Versuchen Sie, die folgenden

Dim str as string = "0006500000" 
Dim d as decimal = cdec(str)/100 
Msgbox(d.tostring("#.##")) 
Verwandte Themen