Beträge konvertieren

Status
Nicht offen für weitere Antworten.

CelikBlek

Bekanntes Mitglied
Hallo,

kann mir jemand sagen wie ich Beträge wie z.B 2303390.20 in 2.303.390,20 konvertieren kann?
umgekehrt habe ich es geschafft, aber das bekomme ich nicht hin.

vielen Dank.
 

byte

Top Contributor
Das geht mit der Funktion:
Code:
format-number(zahl, pattern, decimal-format)

zahl ist die zu formatierende Zahl, pattern ist wie in DecimalFormat von Java beschrieben und decimal-format ist optional, entweder das standard-format oder man setzt ein neues mit:

Code:
<xsl:decimal-format ... />

Snip:

<  decimal-format
   name= qname
   decimal-separator= char
   grouping-separator= char
   infinity= string
   minus-sign= char
   NaN= string
   percent= char
   per-mille= char
   zero-digit= char
   digit= char
   pattern-separator= char >
   <-- Content: -->
< /decimal-format>
 

CelikBlek

Bekanntes Mitglied
könntest du mir das genauer zeigen bitte. angenommen ich habe eigenes template für:
Code:
<xsl:template name="konvertBetrag2">
   <xsl:param name="betrag"/>
   <xsl:value-of select="format-number($betrag, pattern, decimal-format)"/>
</xsl:template>
Der bekommt nur den betrag übergeben. Woher bekomme ich pattern und decimal-format?
 

CelikBlek

Bekanntes Mitglied
spontan hätte ich es so gemacht, aber das geht net.
Code:
		<xsl:value-of select='format-number($betrag, "###.###,00")'/>
 

CelikBlek

Bekanntes Mitglied
So habe es mit zwei templates lösen können:
Code:
	<xsl:template name="ersetze">
		<xsl:param name="mitp"/>
		
		<xsl:variable name="zeichen" select="substring($mitp, 1, 1)"/>
		<xsl:variable name="laenge" select="string-length($mitp)"/>
		<xsl:variable name="neubetrag" select="substring($mitp, 2, $laenge)"/>
		
		<xsl:if test="not($laenge = 0)">
			<xsl:choose>
				<xsl:when test="$zeichen = '.'">
					<xsl:text>,</xsl:text>
				</xsl:when>
				<xsl:when test="$zeichen = ','">
					<xsl:text>.</xsl:text>
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="$zeichen"/>
				</xsl:otherwise>
			</xsl:choose>
			<xsl:call-template name="ersetze">
				<xsl:with-param name="mitp" select="$neubetrag"/>
			</xsl:call-template>
		</xsl:if>
	</xsl:template>
	
	<xsl:template name="konvertBetrag">
		<xsl:param name="betrag"/>
		<xsl:variable name="mitp" select="format-number($betrag, '###,###.00')"/>
		
		<xsl:call-template name="ersetze">
				<xsl:with-param name="mitp" select="$mitp"/>
		</xsl:call-template>
	</xsl:template>
 

byte

Top Contributor
Also nochmal langsam:

1. Du erzeugst Dir ein Decimal-Format mit dem von mir oben geposteten XSL-Tag. Also z.B. so

Code:
<xsl:decimal-format name="meinDezimalFormat" decimal-seperator="," grouping-seperator="." />

Da kannst Du halt Angaben machen, wie z.B. das Dezimaltrennzeichen aussehen soll etc. pp. Das Attribut Name ist halt dann wichtig, wenn Du die Funktion aufrufst.

2. Du definierst Dir ein Muster, wie deine Zahl nun aussehen soll, also z.B. so:

Code:
###,###,###.00

3. Du rufst die Funktion folgendermaßen auf:

Code:
format-number('1234567', '###,###.00', meinDezimalFormat)

Die Methode liefert dann die Zahl (1234567) im übergebenen Dezimalformat (meinDezimalFormat) nach dem entsprechenden Muster (###,###.00) zurück. Das Dezimalformat ist dabei optional, wenn Du es nicht angibst, benutzt er das Standardformat.
 

CelikBlek

Bekanntes Mitglied
Was ich weiter oben geschrieben habe hat gefunzt. Läuft allerdings nicht unter Java :bahnhof:
Deine variante habe ich auch ausprobiert. Sowie du es beschrieben hast. Da funktioniert die Formatierung nicht:
Code:
	<xsl:template name="konvertBetrag">	
                <xsl:decimal-format name="meinDezimalFormat" decimal-seperator="," grouping-seperator="." />
		<xsl:param name="betrag"/>
		<xsl:variable name="mitp" select="format-number($betrag, '###,###.00', meinDezimalFormat)"/>
		<xsl:value-of select="$mitp"/>
	</xsl:template>
Input wäre z. B. 50000.00
Output daraus ist: 50000
 

CelikBlek

Bekanntes Mitglied
Hier nochmal die Fehlermeldung:
Code:
ERROR: Attempting to format number '50000.8' using pattern '#.###,00'.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben