Är ute efter ett skript som ändrar ett värde i ett INPUT-fält till decimaler (för valuta) i realtid, t.ex.: 1 = 1,00 eller 0,2 = 0,20 alltså 0 kronor och 20 öre. Hittade ett skript från Erik Juhlin här på forumet men vet inte hur jag ska göra för att få det att fungera (kan inte javascript, men använder det gärna).
Skriptet från Erik:
function round(number, numdecdig)
{
if (numdecdig == null) return number;
var n = Math.pow(10, numdecdig);
number = parseInt(number * n);
number = number / n;
return number;
}
alert(round(143325.545, 2));
Och min formulärs kod ser ut så här:
<FORM method="POST" name="f_valuta">
<INPUT type="text" name="f_valuta_data" value="" onChange=" -- här ska väl formulärsdatat skickas till skriptet, tror jag --"">
</FORM>
Tack på förhand!
JojoxxMedlem sedan juni 20004 308 inlägg Jag skulle modda funktionen lite så här;
<script type="text/javascript" language="JavaScript">
function round(number, numdecdig){
if(isNaN(number)||isNaN(numdecdig)){return ""}
var n=Math.round(number*Math.pow(10,numdecdig))+"";
return n.substring(0,n.length-2)+"."+n.substring(n.length-2);
}
</script>
<FORM method="POST" name="f_valuta">
<INPUT type="text" name="f_valuta_data" value="" onChange="this.value=round(parseFloat(this.value),2)">
</FORM>
Så att 12 blir 12.00
Tack Jojoxx!
Funkar ju klockrent, nästan... Om man t.ex. skriver in 0,20 så formateras det till ,0 och samma sak händer på alla 0,xx värden. Och skriver man in t.ex 20,20 så blir det 20,00. Är det lät att fixa tro?
Peter SMedlem sedan dec. 20025 483 inlägg Här är en funktion som jag har skrivit:
function FormatCurrency(e,c){
var n = Math.round(e*Math.pow(10,2))/Math.pow(10,2);
return ((n.toString().indexOf(".")==-1)?c+n+".00":(n.toString().substring(n.toString().indexOf(".")+1,n.toString().length).length)>1?c+n.toString():c+n.toString()+"0");
};
Som du använder så här:
alert(FormatCurrency(12.23, "SEK"));
Den andra parametern kan du skriva som "", "hej" eller vad som helst.
:)
Hm, nu när jag skirver 0,1 blir det svaret NaN,00?! Så här ser min kod ut nu men jag är säkert ute och cyklar helt:
<script type="text/javascript" language="JavaScript">
function round(number){
var n = Math.round(number*Math.pow(10,2))/Math.pow(10,2);
return ((n.toString().indexOf(",")==-1)?n+",00":(n.toString().substring(n.toString().indexOf(",")+1,n.toString().length).length)>1?n.toString():n.toString()+"0");
}
</script>
<FORM method="POST" name="f_valuta">
<INPUT type="text" name="f_valuta_data" value="" onChange="this.value=round(this.value)">
</FORM>
jag har bytt ut . (punkt) mot , (komma) eftersom det är så det skrivs i databasen senare...
Peter SMedlem sedan dec. 20025 483 inlägg Det är för att du inte har kopierat in den fullständiga koden. Anropa sedan funktionen så här:
...
onChange="this.value=round(this.value, [b]""[/b])">
...
Notera att den sista parametern till funktionen är "". Skriver du t.ex.: "SEK" blir resultatet följande:
SEKnågot tal
:)
Så går det när man försöker sig på något utan att veta vad man pysslar med ;) .
Tänkte på en sak, måste inte input värdet vara i formatet xx.xx för att det skall fungera? Som jag har gjort har jag matat in värderna med formatet xx,xx vilket jag tror orsakar problem. Kan man ändra ett xx,xx värde till xx.xx i skriptet innan man formaterar om värdet? Skulle helst vilja ha det så då det som sagt är så det skrivs i databasen lite senare.
Peter SMedlem sedan dec. 20025 483 inlägg Så här:
function FormatCurrency(e,c){
var n = Math.round(e*Math.pow(10,2))/Math.pow(10,2);
return ((n.toString().indexOf(".")==-1)?c+n+".00":(n.toString().substring(n.toString().indexOf(".")+1,n.toString().length).length)>1?c+n.toString():c+n.toString()+"0").replace(/[.]/g,",");
};
Mata t.ex. in värdet i formatet: 12.23 så byter skriptet ut alla "." mot ",".
:)
Jag tänkte mig att , skulle bytas ut till punkt innan uträkningen sker, men det är ok, jag hittade detta skript på irt.org och det fungerade klockrent:
<SCRIPT LANGUAGE="JavaScript"><!--
function OutputPengar(Number) {
myNumber = parseFloat(Number.split(',').join('.'));
return OutputKronor(Math.floor(myNumber-0) + '') + OutputOre(myNumber - 0);
}
function OutputKronor(myNumber) {
if (myNumber.length <= 3)
return (myNumber == '' ? '0' : myNumber);
else {
var mod = myNumber.length%3;
var output = (mod == 0 ? '' : (myNumber.substring(0,mod)));
for (i=0 ; i < Math.floor(myNumber.length/3) ; i++) {
if ((mod ==0) && (i ==0))
output+= myNumber.substring(mod+3*i,mod+3*i+3);
else
output+= ',' + myNumber.substring(mod+3*i,mod+3*i+3);
}
return (output);
}
}
function OutputOre(amount) {
amount = Math.round( ( (amount) - Math.floor(amount) ) *100);
return (amount < 10 ? ',0' + amount : ',' + amount);
}
//--></SCRIPT>
<FORM method="POST" name="f_valuta">
<INPUT type="text" name="f_valuta_data" value="" onChange="this.value=OutputPengar(this.value);">
</FORM>
Men ett stort TACK till er båda för hjälpen ialla fall :) !