Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Formatierte Zahlenausgabe

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

Schlußbemerkung

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.