Preise formatieren
Norbert
- javascript
Hi,
um Preise formatiert auszugeben habe ich mir diese Funktion geschrieben:
function PreisFormat(zahl) {
wert = parseInt(zahl * 100);
wert = wert / 100;
wert = wert.toFixed(2);
return wert.replace(/./,',') + ' &euro';
}
Zu den moeglichen Tausender-Trennzeichen fehlt mir jedoch noch eine zuendende Idee.
Vielleicht hat jemand auch sowas schon geloest ...
Gruss und Dank
Norbert
Hallo Norbert,
Zu den moeglichen Tausender-Trennzeichen fehlt mir jedoch noch eine zuendende Idee.
Ich würde mir die einzelnen Tausenderblöcke und die zwei Nachkommastellen in ein Array zwischenspeichern.
Alle Blöcke kannst du mit dem Modulooperator ermitteln.
Gruß Gernot
Hallo nochmal,
was ich hier selbst zu dem Thema im Archiv fand (ja da gab es durchaus etwas!) hat mir nicht so gefallen; deshalb habe ich mal selbst was gebastelt:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Preis formatieren</title>
<meta name="author" content="Gernot Back" />
<meta name="generator" content="Ulli Meybohms HTML EDITOR" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
[code lang=css]
td, td input {
font-family:sans-serif;
white-space:nowrap;
font-size:.9em;
padding:0;
margin0;
}
td.inp input {
font-family:"Courier New", Courier, monospace;
text-align:right;
float:right;
padding:0 .3em;
border:solid 1px black;
width:15.5em;
}
</style>
<script type="text/javascript">
function format (obj) {
var zahl = parseFloat(obj.inp.value);
var dsep = obj.dsep.value;
if (dsep!=",") dsep =".";
obj.dsep.value = dsep;
var tsep = obj.tsep.value;
if (tsep==dsep||(tsep!=','&&tsep!='.'&&tsep!=' ')) {
if(dsep=='.')
tsep=",";
else
tsep=" ";
obj.tsep.value=tsep;
}
var prec = parseInt(obj.prec.value);
var bloecke=new Array();
if (prec>0)
var nkomma = (zahl%1).toFixed(prec);
else
var nkomma = '';
nkomma = nkomma.replace(/0\./,dsep)
zahl=parseInt(zahl);
for (i=0; zahl>0; i++) {
bloecke[i]=zahl%1000;
zahl/=1000;
zahl=parseInt(zahl);
}
zahl=bloecke.reverse().join(tsep);
obj.outp.value = zahl + nkomma + ' EUR';
return false;
}
</script>
</head>
<body>
<h1>Formatierung von Preisen</h1>
<form action="#" onsubmit="~~~javascript
return format(this)
<table>
<tr>
<td>Eingabe:</td>
<td class="inp"><input type="text" name="inp" value="123456.789" size="10" maxlength="10" /></td>
<td>Zahl in amerikanischem Format</td>
</tr>
<tr>
<td>Dezimaltrenner:</td>
<td class="inp"><input class="sep" type="text" name="dsep" value="," size="1" maxlength="1" /></td>
<td>Komma oder Punkt</td>
</tr>
<tr>
<td>Nachkommastellen:</td>
<td class="inp"><input type="text" name="prec" value="2" size="1" maxlength="1" /></td>
<td>Null bis zu neun</td>
</tr>
<tr>
<td>Tausendertrenner:</td>
<td class="inp"><input class="sep" type="text" name="tsep" value="." size="1" maxlength="1" /></td>
<td>Komma, Punkt oder Leerzeichen</td>
</tr>
<tr>
<td><input type="submit" name="" value="Ausgabe" /></td>
<td class="inp"><input type="text" name="outp" value="" size="" maxlength="" readonly="readonly" /></td>
<td>Feld nicht von Hand editierbar</td>
</tr>
</table>
</form>
</body>
</html>[/code]
Gruß Gernot
Hallo Gernot,
zuerst mal vielen Dank fuer Deine Muehe.
Schau mal, was ich hier noch gefunden habe:
function PreisFormat(zahl) {
wert = parseInt(zahl * 100);
wert = wert / 100;
wert = wert.toFixed(2);
wert = wert.replace(/./,",");
while(wert.match(/^(\d+)(\d{3}\b)/)) {
wert = wert.replace(/^(\d+)(\d{3}\b)/, RegExp.$1 + '.' + RegExp.$2);
}
return wert + ' €';
}
Das hat was, vor allem, weil es so schlank ist (IMHO).
Gruss und Dank
Norbert
Hi,
wert = parseInt(zahl * 100);
wert = wert / 100;
wert = wert.toFixed(2);
Wozu dabei die ersten 2 Zeilen?
Das hat was, vor allem, weil es so schlank ist (IMHO).
Wegen der überflüssigen 2 Zeilen am Anfang?
cu,
Andreas
Hi Andreas,
wert = parseInt(zahl * 100);
wert = wert / 100;
wert = wert.toFixed(2);
Wozu dabei die ersten 2 Zeilen?
hmm,
Du kannst sie ja gerne weglassen - ich tue es nicht !
Ich gebe auch zu, dass ich zu faul bin,
um endgueltig auszutesten, dass sie unnoetig sind.
Gruss Norbert
wert = parseInt(zahl * 100);
wert = wert / 100;
wert = wert.toFixed(2);
...
Ich gebe auch zu, dass ich zu faul bin,
um endgueltig auszutesten, dass sie unnoetig sind.
sie sind unnötig und falsch, da sie das Ergebnis verfälschen.
Probier mal z.b. 1.049 aus.
Struppi.