Geschrieben von: Christian Koller
Kategorie: ASP Grundlagen
This printed page brought to you by AlphaSierraPapa
Um eine in VBscript errechnete Zahl dem User zu präsentieren, ist es oft im Sinne der Benutzerfreundlichkeit, wenn man diese Zahl in der gewünschten Weise formatiert, um so festzulegen, wieviele Kommastellen angezeigt werden, oder ob ein Trennzeichen alle 3 Zahlen eingefügt wird.
Der Sinn dieses Vorgehens wird besonders augenfällig, wenn man sich ein Beispiel wie folgt ansieht:
Hochrechnung:
Jahr | Einnahmen |
---|---|
2000 | -456.78 |
2001 | 413.20299 |
2002 | 2230.64932 |
Keine dieser Zahlen ist formatiert, sondern wurde einfach so ausgegeben, wie sie in VBScript errechnet wurden. Welche Funktion(en) bietet aber nun VBScript, um Zahlen zu formatieren und damit lesbarer darzustellen?
Zum einen ist da die FormatNumber Funktion, die es erlaubt, die Anzahl der Nachkomma-Stellen festzulegen, und die auch Ziffern in 3er Gruppen zusammenfassen kann. Die Syntax der FormatNumber Funktion ist wie folgt:
FormatierteZahl = FormatNumber(Zahl,Nachkommastellen, Führende_Null,Klammern_für_negative_Zahlen,Zahlengruppen)
Dabei steht Zahl für die zu formatierende Zahl. Nachkommastellen steht für die Anzahl der Nachkommastellen, die noch angezeigt werden. Der optionale Parameter Führende_Null gibt an, ob bei Bruchzahlen eine Null vor dem Komma angezeigt wird oder nicht.
Mit Klammern_für_negative_Zahlen gibt man an, ob negative Zahlen in Klammern ausgegeben werden, wie zum Beispiel (200) statt -200. Der Zahlengruppen Parameter erlaubt es, die Zahlen vor dem Komma in 3er Gruppen zu gruppieren.
Für die Parameter Führende_Null,Klammern_für_negative_Zahlen und Zahlengruppen kann man folgende Werte benutzen:
Parameter setzen: | -1 |
Parameter nicht setzen: | 0 |
Parameter wie in Länder- einstellung des Computers: |
-2 |
Beim Festlegen einer bestimmten Anzahl von Nachkommastellen wird die letzte Nachkommastelle automatisch auf- oder abgerundet.
Um nun also in der Hochrechnungstabelle von vorhin die Zahlen so zu formatieren, daß 2 Nachkommastellen sichtbar sind, eine führende Null bei Bruchzahlen angezeigt wird und negative Zahlen nicht in Klammer stehen, benutzt man die Funktion FormatNumber wie folgt:
FormatierteZahl = FormatNumber(Zahl,2,-1,0,-1)
Damit sieht die Beispiel-Tabelle wie folgt aus:
Hochrechnung:
Jahr | Einnahmen |
---|---|
2000 | -456.78 |
2001 | 413.20 |
2002 | 2,230.65 |
Damit die Zahlen so gleichmäßig untereinander stehen wurden folgende zwei Tricks angewendet: Die Zahlen wurden in der Tabellenzelle rechtsbündig formatiert - dies ist durch den Zusatz align="right" im <td> Tag zu bewerkstelligen. Weiters wurden die Zahlen mit dem <tt> Tag begrenzt um sie in einer Schrift mit fixer Buchstabenweite darzustellen:
<td align="right"><tt> 2,230.65 </tt></td>
Wenn sie sich gewundert haben, warum die formatierten Zahlen in der Tabelle einen Punkt als Komma, und eine Beistrich als Gruppierungszeichen haben, so liegt dies daran, daß ich das Beispielscript auf einem amerikanischen Webserver ablaufen habe lassen, der natürlich auch den amerikanischen Regionalcode gesetzt hat.
Alle Zahlen werden bei Verwendung der FormatNumber Funktion gemäß den länderspezifischen Einstellungen des Webservers formatiert. Um nun ganz sicher zu gehen, daß die Zahlen gemäß den deutschen Ländereinstellungen formatiert werden, kann man in ASP-Seiten die @LCID Direktive, oder die VBScript Funktion namens SetLocale verwenden:
< @LCID=1031 > ... oder SetLocale("de") ...
Anzumerken ist, daß sowohl das Setzen der @LCID-Direktive als auch der Aufruf der Funktion SetLocale die Wirkung haben, Zahlen beim Umwandeln in Strings gemäß den deutschen Ländereinstellungen zu formatieren. Hingegen wird beim direkten Ausgeben einer Zahl diese weiterhin mit einem Punkt als Komma dargestellt:
<% SetLocale("de") lngA = 27.1287 ' Direktes Ausgeben der Zahl: Response.Write lngA Response.Write "<BR>" & VbCrLf ' Explizite Umwandlung in einen String: Response.Write CStr(lngA) Response.Write "<BR>" & VbCrLf ' Implizite Umwandlung in einen String: Response.Write "" & lngA Response.Write "<BR>" & VbCrLf ' Formatieren mit FormatNumber: Response.Write FormatNumber(lngA) Response.Write "<BR>" & VbCrLf %> Ergebnis: 27.1287 27,1287 27,1287 27,13
Ähnlich wie die Funktion FormatNumber es erlaubt Zahlen zu formatieren, so stellt die VBScript Funktion FormatCurrency die Funktionalität zur Verfügung, um Währungsbeträge formatiert darzustellen. Der Syntax der FormatCurrency Funktion lautet wie folgt:
FormatierteWährung = FormatCurrency(Zahl,Nachkommastellen, Führende_Null,Klammern_für_negative_Zahlen,Zahlengruppen)
Das Währungssymbol, wie $ oder DM wird dabei wieder von der Ländereinstellung des Servers bestimmt. Die Ländereinstellung kann dabei wieder durch die @LCID Direktive oder die SetLocale Funktion erfolgen, wie im folgenden Beispiel:
<% lngA = 27.1287 ' Deutsche Ländereinstellung: SetLocale("de") Response.Write lngA Response.Write "<BR>" & VbCrLf ' Schweizer Ländereinstellung: SetLocale("de-ch") Response.Write lngA Response.Write "<BR>" & VbCrLf ' Österreichische Ländereinstellung: SetLocale("de-at") Response.Write lngA Response.Write "<BR>" & VbCrLf %> Ergebnis: 27,13 DM SFr. 27.13 öS 27,13
Um nun auch DM vor den Betrag zu stellen oder Euro als Währung auszugeben benutzt man am besten selbstgebastelte Funktionen:
<% Function FormatDM(Zahl) Dim tmpLocale tmpLocale = SetLocale("de") FormatDM = "DM " & FormatNumber(Zahl,2,-1,0,-1) SetLocale tmpLocale End Function Function FormatEuro(Zahl) Dim tmpLocale tmpLocale = SetLocale("de") FormatEuro = "Euro " & FormatNumber(Zahl,2,-1,0,-1) SetLocale tmpLocale End Function lngA = 0.49 Response.Write FormatDM(lngA) Response.Write "<BR>" & VbCrLf Response.Write FormatEuro(lngA) Response.Write "<BR>" & VbCrLf > Ergebnis: DM 0,49 Euro 0,49
Verwandt zu FormatNumber oder FormatCurrency sind die VBScript Funktionen FormatPercent und FormatDateTime. Doch dies soll Stoff für einen späteren Artikel sein.
This printed page brought to you by AlphaSierraPapa
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.