Avatar billede bio Novice
21. juni 2011 - 14:48 Der er 18 kommentarer og
1 løsning

Omregning blokerer hvis tallet ikke er et helt tal - accepterer ikke komma

Jeg har en side, hvor der foretages en automatisk omregning

Et tal kan valgfrit indskrives i en boks, hvorved omregningen vises i den anden boks.

Men i en situation blokeres omregningen:

Ved indskrivning af et kommatal svarer resultatboksen med et "NaN".

Det er kun, når der spørges med et helt tal, at resultatboksen korrekt svarer med et kommatal.

Findes der en løsning på det problem?

(spørgsmålet er en udløber af det besvarede spørgsmål http://www.eksperten.dk/spm/941284#reply_7796101)

HELE KODEN ER HER:

<head>
<script type="text/javascript">
function convert(degree)
{
if (degree=="C")
{
F=document.getElementById("c").value / 100;
document.getElementById("f").value=(F);
}
else   
{
C=(document.getElementById("f").value ) * 100;
document.getElementById("c").value=(C);
}
}
</script>
</head>
<body>
<h1>Omregning mellem rad og gray (Gy)</h1>
<p></p><b>Indsæt et tal i et af felterne her:</b></p>
<form>
<input id="c" name="c" onkeyup="convert('C')"> antal rad<br />
er lig med<br />
<input id="f" name="f" onkeyup="convert('F')"> antal gray (Gy)
</form>
</body>

</html>
Avatar billede olsensweb.dk Ekspert
21. juni 2011 - 15:17 #1
kan du ikke bare replace komma i indput med et punktum
function convert(degree){
    if (degree=="C"){
        F=document.getElementById("c").value.replace (',', '.')  / 100;           
        document.getElementById("f").value=(F);
    }
    else  {
        C=((document.getElementById("f").value ).replace (',', '.')) * 100;                
        document.getElementById("c").value=(C);
    }
}
Avatar billede bio Novice
21. juni 2011 - 15:33 #2
Det er selvfølgelig en mulighed, men da disse sider skulle kunne bruges af skoleelever er det jo lidt indviklet.
Avatar billede erikjacobsen Ekspert
21. juni 2011 - 16:00 #3
Det er ikke indviklet for eleverne. Du erstatter komma med punktum før beregning, og derefter punktum med komma, når du viser resultatet.
Avatar billede bio Novice
21. juni 2011 - 23:30 #4
Joh, men kan det forklares i kodesprog?

Du mener vel at jeg skal erstatte det komma, som folk måtte indskrive, med et punktum før beregningen sker. Det må jeg i så fald bede om hjælp til.
Avatar billede olsensweb.dk Ekspert
21. juni 2011 - 23:44 #5
>Du mener vel at jeg skal erstatte det komma, som folk måtte indskrive, med et punktum før beregningen sker. Det må jeg i så fald bede om hjælp til.
det var det jeg lavede i #1
og output lille omskrivning af http://www.eksperten.dk/spm/941284 #4

function convert(degree){
    if (degree=="C"){
        F=document.getElementById("c").value.replace (',', '.')  / 100;          // replacer komma før beregning, samt udregning
        document.getElementById("f").value= (F.toString().replace ('.', ',')); // replacer punktum efter beregning
    }
    else  {
        C=((document.getElementById("f").value ).replace (',', '.')) * 100;    // replacer komma før beregning, samt udregning
        document.getElementById("c").value= (C.toString().replace ('.', ',')); // replacer punktum efter beregning
    }
}
Avatar billede bio Novice
06. juli 2011 - 08:14 #6
Som eksempel har jeg lavet en omregningsformel fra m til cm

Jeg har indsat den foreslåede kode på siden her

http://www.webkomplet.eu/omregner-test/

men det virker desværre ikke.


Den tidligere kode er indsat på

http://www.webkomplet.eu/omregner-test/test1

men den har altså problemet, at man ikke kan indsætte komma-tal
Avatar billede erikjacobsen Ekspert
06. juli 2011 - 09:12 #7
Du har ikke lavet funktionen convert i din kode. Prøv at skrive alt det som ronols skriver.
Avatar billede bio Novice
06. juli 2011 - 09:52 #8
Mange tak. Ja, jeg havde glemt førstelinien.

function convert(degree){ 

Nu fungerer
http://www.webkomplet.eu/omregner-test/

nogenlunde

men 1,1 meter omregner siden til
110,00000000000001 cm

og

1,13 meter omregner siden til 112,99999999999998 cm
Avatar billede erikjacobsen Ekspert
06. juli 2011 - 10:39 #9
Den regner så præcist den kan med binære kommatal. Du kan kigge på http://www.w3schools.com/jsref/jsref_tofixed.asp for at afrunde i udskriften.
Avatar billede bio Novice
06. juli 2011 - 12:34 #10
Tak for linket

jeg har forsøgt at indsætte koden for toFixed i
koden for omregningen

men hvor/hvordan skal koden indsættes? Det mislykkes hver gang for mig.

seneste forsøg:

http://www.webkomplet.eu/omregner-test/
Avatar billede olsensweb.dk Ekspert
06. juli 2011 - 12:59 #11
har du prøvet dette ??
du skal lave tofixet på dit tal før det bliver en string
function convert(degree){
    if (degree=="C"){
        F=document.getElementById("c").value.replace (',', '.')  / 100;           
        document.getElementById("f").value= (F.toFixed (6).toString().replace ('.', ','));
    }
    else  {
        C=((document.getElementById("f").value ).replace (',', '.')) * 100;       
        document.getElementById("c").value= (C.toFixed (6).toString().replace ('.', ','));
    }
}
Avatar billede olsensweb.dk Ekspert
06. juli 2011 - 13:48 #12
nedenstående code er et kopi at #11 bare "exploderet", og tilføjet en del kommentarer, så man kan se hvad der sker step by step
function convert(degree){
    // for god orden skyld må jeg hellere erklærer variablerne så de ikke lever uden for functionen,
    // hvilke de vil gøre hvis man ikke erklærer dem inde i functionen ref http://www.eksperten.dk/spm/941682#reply_7798406
    var F;
    var C;
    var F_str;
    var C_str;   
    if (degree=="C"){       
        // indlæser værdien som en string, og erstatter decimal seperatoren komma med punktum
        F_str=document.getElementById("c").value.replace (',', '.');           
        // beregner værdien, der sker en automatisk castting til tal ved beregning
        F=F_str/100;
        // værdien sættes til et fast antal decimaler efter kommanet
        F=F.toFixed (6);
        // værdien convateres til en string, og decimal seperatoren laves om fra punktum til komma
        F_str=F.toString().replace ('.', ',');       
        // lægger værdien over i nyt felt
        document.getElementById("f").value= F_str;
    }
    else  {
        // indlæser værdien som en string, og erstatter decimal seperatoren komma med punktum
        C_str=document.getElementById("f").value.replace (',', '.');           
        // beregner værdien, der sker en automatisk castting til tal ved beregning
        C=C_str * 100;
        // værdien sættes til et fast antal decimaler efter kommanet
        C=C.toFixed (6);
        // værdien convateres til en string, og decimal seperatoren laves om fra punktum til komma
        C_str=C.toString().replace ('.', ',');       
        // lægger værdien over i nyt felt
        document.getElementById("c").value= C_str;       
    }
}
Avatar billede bio Novice
06. juli 2011 - 13:58 #13
http://www.webkomplet.eu/omregner-test/

Mange tak, så lykkedes det hele.

Skriv "som svar" for løsning/pointgivning



koden skal være:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da" lang="da">
<head>
</head>

<body>
<script type="text/javascript">
function convert(degree)

if (degree=="C"){ 

      F=document.getElementById("c").value.replace (',', '.')  * 100;         
// den førstående kommandosætning replacerer komma før beregning, samt udregning       

document.getElementById("f").value= (F.toFixed (6).toString().replace ('.', ','));
// den førstående kommandosætning replacerer punktum efter beregning   

// for at begrænse til 6 decimaler efter beregning skal " toFixed " på tallet indsættes før det bliver en "string"
 


}   

else  {       


C=((document.getElementById("f").value ).replace (',', '.')) / 100;   
// den førstående kommandosætning replacerer komma før beregning, samt udregning       

document.getElementById("c").value= (C.toFixed (6).toString().replace ('.', ','));
// den førstående kommandosætning replacerer punktum efter beregning   

// for at begrænse til 6 decimaler efter beregning skal " toFixed " på tallet indsættes før det bliver en "string"
 

}
}
</script>

<h1>Omregning mellem meter (m) og centimeter (cm) </h1>
<p></p><b>Indsæt et tal i et af felterne her:</b></p>
<form>

<input id="c" name="c" style="font-size: 14pt; color: fuchsia" onkeyup="convert('C')"> antal meter (m) <br />
er lig med<br />
<input id="f" name="f" style="font-size: 14pt; color: red" onkeyup="convert('F')"> antal centimeter (cm)
</form>

</body>

</html>
Avatar billede olsensweb.dk Ekspert
06. juli 2011 - 14:14 #14
svar

nb: dine indlæg vil blive nemmere at læse / overskue, hvis du indrammer din code i en blå box, jeg bruger altid disse 2 bb tags til code
(div)(pre) her ville alting stå i en blå box, med en scroll bar i bunden, hvis der er behov for det, forudsat jeg havde brugt firkant paranteser istedet for runde paranteser, læs denne guide om bb tags på E http://www.eksperten.dk/guide/1325 (/pre)(/div)
her ville jeg så være ude for den blå box igen
Avatar billede bio Novice
06. juli 2011 - 14:17 #15
jeg mener at jeg bare kopierede din tekst over
og afprøvede den, men der er noget galt:

http://www.webkomplet.eu/omregner-test/detlykkedes/
Avatar billede bio Novice
06. juli 2011 - 14:22 #16
Jeg fandt mine fejl (nylinier manglede)

Jeg har ombyttet gange og dele

http://www.webkomplet.eu/omregner-test/detlykkedes/

kan du evt. kopiere denne ind i en svarbox ?

Tak for hjælpen
Avatar billede olsensweb.dk Ekspert
06. juli 2011 - 15:08 #17
>Jeg fandt mine fejl (nylinier manglede)
ja, i din linje 39, har du glemt linje skift efter komma
// værdien konverteres til en string, og decimal separatoren laves om fra punktum til komma        C_str=C.toString().replace ('.', ','); // værdien konverteres til en string, og decimal separatoren laves om fra punktum til komma        C_str=C.toString().replace ('.', ','); // værdien konverteres til en string, og decimal separatoren laves om fra punktum til komma        C_str=C.toString().replace ('.', ','); 

skal se sådan ud
// værdien konverteres til en string, og decimal separatoren laves om fra punktum til komma        
C_str=C.toString().replace ('.', ',');



>kan du evt. kopiere denne ind i en svarbox ?
hvorfor som svar ??


din rettet vertion
<!DOCTYPE html>
<html>
<head>
<title> </title>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
</head>
<body>
<script type="text/javascript">
function convert(degree)
{   
// for god orden skyld må jeg hellere erklærer variablerne så de ikke lever uden for functionen,   
// hvilke de vil gøre hvis man ikke erklærer dem inde i functionen ref http://www.eksperten.dk/spm/941682#reply_7798406
var F;   
var C;   
var F_str;   
var C_str;       
if (degree=="C")
{               
// indlæser værdien som en string, og erstatter decimal-separatoren komma med punktum       
F_str=document.getElementById("c").value.replace (',', '.');                   
// beregner værdien, der sker en automatisk castting til tal ved beregning       
F=F_str*100;       
// værdien sættes til et fast antal decimaler efter kommaet       
F=F.toFixed (6);       
// værdien konverteres til en string, og decimal separatoren laves om fra punktum til komma     
F_str=F.toString().replace ('.', ',');               
// lægger værdien over i nyt felt       
document.getElementById("f").value= F_str;   
}   
else 
{       
// indlæser værdien som en string, og erstatter decimal-separatoren komma med punktum       
C_str=document.getElementById("f").value.replace (',', '.');                   
// beregner værdien, der sker en automatisk castting til tal ved beregning       
C=C_str / 100;       
// værdien sættes til et fast antal decimaler efter kommanet       
C=C.toFixed (6);       
// værdien konverteres til en string, og decimal separatoren laves om fra punktum til komma       
C_str=C.toString().replace ('.', ',');               
// lægger værdien over i nyt felt       
document.getElementById("c").value= C_str;           
}
}
</script>

<h1>Omregning mellem meter (m) og centimeter (cm) </h1>
<p><b>Indsæt et tal i et af felterne her:</b></p>
<form>
<input id="c" name="c" style="font-size: 14pt; color: fuchsia" onkeyup="convert('C')"> antal meter (m) <br />

er lig med<br />
<input id="f" name="f" style="font-size: 14pt; color: red" onkeyup="convert('F')"> antal centimeter (cm)
</form>
</body>
</html>

demo http://olsensweb.dk/test/experten/spm/941537/test.htm
Avatar billede bio Novice
06. juli 2011 - 17:38 #18
Tak for hjælpen
Avatar billede bio Novice
06. juli 2011 - 17:42 #19
Vedrørende #14

" nb: dine indlæg vil blive nemmere at læse / overskue, hvis du indrammer din code i en blå box, jeg bruger altid disse 2 bb tags til code
(div)(pre) her ville alting stå i en blå box, med en scroll bar i bunden, hvis der er behov for det, forudsat jeg havde brugt firkant paranteser istedet for runde paranteser, læs denne guide om bb tags på E http://www.eksperten.dk/ (...) (/pre)(/div)
her ville jeg så være ude for den blå box igen "


Når jeg kopierer fra blå box til Notesblok forsvinder linieskiftene (??)
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

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