Avatar billede Slettet bruger
16. august 2005 - 01:54 Der er 13 kommentarer og
1 løsning

Udreng procent af decimaltal

Hej

Jeg har en funktion der skal udregne en ny rabat pris, efter at gange det indtastet procenttal ind i den eksisterende pris, men min javascript viden er lidt støvet, så jeg er gået lidt i stå. Jeg håber I kan hjælpe. Min funktion ser således ud:

function opdaterpris(foerpris){
rabat = document.form['rabat_vare'].value;

if (rabat > 100){
alert("For højt tal, maks. 100!");
document.form['rabat_vare'].value='0';
document.all['pris_efter_rabat'].innerHTML = ''+foerpris+' Kr.';
}else{
nyrabat = foerpris/rabat*100;
document.all['pris_efter_rabat'].innerHTML = ''+nyrabat+' Kr.';
}
}

Min browser viser ingen fejl, men i feltet "pris_efter_rabat" sker der ingen ændring og jeg gætter på fejlen ligger i regnestykket "nyrabat". Dog skal det lige siges, at jeg regner med 2 decimaltal. Tallet "foerpris" kan fx være 19,95. Jeg vil også gerne have det udregnet tal "nyrabat" til at være med 2 kommadecimaler.

På forhånd tak :)
Avatar billede Slettet bruger
16. august 2005 - 01:54 #1
Den skriver bare NaN istedet for et resultat!
Avatar billede roenving Novice
16. august 2005 - 02:10 #2
Tjah, rabat er jo en tekststreng, når du aflæser den som værdi i et felt, og hvis der er komma i, kan javascript ikke gætte sig til at det er et tal ...

Du kan finde en funktion, som kan noget forskelligt med tekstformattering af tal her: http://exp.dk/spm/640316 !-)

-- råt, uden afrunding osv., ville jeg prøve sådan:

function opdaterpris(foerpris){
  rabat = +document.form['rabat_vare'].value.replace(/,/,".");

  if (rabat > 100){
    alert("For højt tal, maks. 100!");
    document.form['rabat_vare'].value='0';
    document.getElementById('pris_efter_rabat').innerHTML = foerpris+' Kr.';
  }else{
    nyrabat = foerpris*100/rabat;
    document.getElementById('pris_efter_rabat').innerHTML = nyrabat+' Kr.';
  }
}
Avatar billede roenving Novice
16. august 2005 - 02:11 #3
-- men den vil jo returnere rabatten, ikke prisen efter rabat, så nok:

    document.getElementById('pris_efter_rabat').innerHTML = foerpris-nyrabat+' Kr.';
Avatar billede nielle Nybegynder
16. august 2005 - 08:25 #4
Ret lige:

nyrabat = foerpris*100/rabat;

- til:

nyrabat = foerpris*rabat/100;
Avatar billede Slettet bruger
16. august 2005 - 11:01 #5
Godmorgen

Tja, jeg må nok indrømme at mit javascript er ret håbløst i denne situation. Jeg er kommet frem til koden (inspireret af det link du gav mig, med validering), men det virker ikke korrekt endnu.

function opdaterpris(vare_id,foerpris){

rabat = +document.form['rabat_vare_'].value.replace(/,/,".");

if(!rabat.match(/^-?\d+([,\.]\d+)*$/)){
    alert("Fejl, ikke gyldige tegn blev indtastet. Kun tal og komma er tilladt!");
    return "";
  }else{
if (rabat > 100){
alert("For højt tal, maks. 100!");
document.form['rabat_vare_'+vare_id+''].value='0';
document.all['pris_efter_rabat'].innerHTML = ''+foerpris+' Kr.';
}else{
nyrabat = foerpris*rabat/100;
document.all['pris_efter_rabat'].innerHTML = foerpris-nyrabat+' Kr.';
}
}
 

}
Avatar billede Slettet bruger
16. august 2005 - 11:02 #6
bare lige se bort fra "vare_id"... Det er noget som jeg har planer om at bygge på, men ikke noget jeg skal bruge endnu...
Avatar billede nielle Nybegynder
16. august 2005 - 11:08 #7
Jeg kan se fra dit pattern at du tillader at man kan skrive et minus-tegn foran din rabbat-sats. Det er ikke nogen god ide. Du skal gøre op ned dig selv om rabatten altid skal være et positivt eller et negativt tal.
Avatar billede Slettet bruger
16. august 2005 - 11:09 #8
Okay, hvordan ændre jeg det? :)
Avatar billede nielle Nybegynder
16. august 2005 - 11:25 #9
if(!rabat.match(/^\d+([,\.]\d+)*$/)){
Avatar billede Slettet bruger
16. august 2005 - 12:28 #10
Hej igen... Jeg er kommet frem til følgende indtil videre:

function opdaterpris(foerpris){
var rabat;
foerpris = parseInt(foerpris);
string_rabat = document.form['rabat_vare'].value;
if(!string_rabat.match(/^\d+([,\.]\d+)*$/)){
document.form['rabat_vare'].value='0';
document.all['pris_efter_rabat'].innerHTML = ''+foerpris+' Kr.';
    alert("Fejl, ikke gyldige tegn blev indtastet. Kun tal og komma er tilladt!");
    return "";
  }else{
rabat = parseInt(document.form['rabat_vare'].value);
if (rabat > 100){
alert("For højt tal, maks. 100!");
document.form['rabat_vare'].value='0';
document.all['pris_efter_rabat'].innerHTML = ''+foerpris+' Kr.';
}else{
nyrabat = foerpris*rabat/100;
document.all['pris_efter_rabat'].innerHTML = foerpris-nyrabat+' Kr.';
}
}

}

Men, jeg kan stadig ikke få den til at bruge kommatal, hvis jeg indtaster dem i formen, altså i document.form['rabat_vare'], hvordan gør jeg det?!? Samt, vil jeg gerne at den i pris_efter_rabat, skriver tallet med tusindseperator samt 2 decimaler efter komma...
Avatar billede Slettet bruger
16. august 2005 - 13:35 #11
Jeg har selv fået lavet det, med lidt diverse koder jeg har fundet... Det kan godt være at det ikke lige har gjort det nemt for mig, men det virker... Den eneste justering jeg har lavet, er at foerpris nu er med "punktum-komma" istedet for traditionelt dansk komma, så nu virker det. Hvis I begge lige vil lave et svar, så kan I få lidt point for at hjælpe på rette kurs. Min kode blev som følger:

function updateprisefterrabat(vare_id,foerpris){
var rabat;
string_rabat = document.tilfoej_kunde['rabat_vare_'+vare_id+''].value;
if(!string_rabat.match(/^\d+([,\.]\d+)*$/)){
        document.tilfoej_kunde['rabat_vare_'+vare_id+''].value='0';
        document.all['pris_efter_rabat_'+vare_id+''].innerHTML = ''+foerpris+' Kr.';
    alert("Fejl, ikke gyldige tegn blev indtastet. Kun tal og komma er tilladt!");
    return "";
}else{
        rabat = parseInt(document.tilfoej_kunde['rabat_vare_'+vare_id+''].value);
        if (rabat > 100){
                alert("For højt tal, maks. 100!");
                document.tilfoej_kunde['rabat_vare_'+vare_id+''].value='0';
                document.all['pris_efter_rabat_'+vare_id+''].innerHTML = ''+foerpris+' Kr.';
        }else{
                nyrabat = (foerpris)-(foerpris*rabat/100);
                var val = nyrabat;
                val+="";
              komma = val.indexOf('.');
              if(komma>-1){
                    dec = val.substring(komma)+'00';
                            if(dec.length>3)dec = Math.round(parseFloat('0'+dec)*100);
                    else dec = dec.substring(1,3);
                            val = val.substring(0,komma);
                        }
                else dec = "00";
                      val = val.split('').reverse().join('');
                      val = val.replace(/(\d{3})/g, "$1.");
              if(val.length%4==0)val = val.substring(0,val.length-1);
              val = val.split('').reverse().join('');
                document.all['pris_efter_rabat_'+vare_id+''].innerHTML = ""+val+","+dec+" Kr.";
                }
        }

}
Avatar billede nielle Nybegynder
16. august 2005 - 13:37 #12
Ingen point til mig på denne her. :^)
Avatar billede roenving Novice
16. august 2005 - 13:49 #13
Så velbekomme '-)
Avatar billede roenving Novice
19. august 2005 - 12:22 #14
Tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester