JavaScript
Børre Stenseth
Noen begreper >Tall

Tall

JavaScript kan skille mellom desimaltall(float) og heltall(integer). Vi kan ikke deklarere dem siden vi ikke har noen mulighet for å angi type for en variable, men vi kan sørge for at en tall-varable oppfører seg som heltall eller desimaltall.

Vi har ofte behov for å konvertere fra tekst til tall. JavaScript har to egnede funksjoner: parseInt() og parseFloat()

parseFloat(string)

Funksjonen tar en string som input og produserer et flytetall.

parseFloat('2.67') -> 2.67
parseFloat('2.67 meter') -> 2.67
parseFloat('0.2e6') -> 200000
parseFloat('jensen') -> NaN

Merk at ikke-numeriske verdier på slutten av en god begynnelse ignoreres, og at når funksjonen feiler returnerer den verdien NaN ("Not-a-Number"). Noen gamle nettlesere kan levere 0 istedet for NaN. Vi kan teste om en verdi er NaN med funksjonen: isNaN(verdi), se nedenfor.

Du kan forsøke deg fram med noen konverteringer nedenfor (skriv inn en string og trykk på likhetstegnet)

parseFloat(' ') ?

parseInt(string[,base])

Funksjonen tar en string som input og produserer et heltall. Vi kan dessuten angi hvilket tallsystem vi vil ha svaret i. 10-tallsystemet er default.

parseInt('12') -> 12
parseInt('12.4') -> 12
parseInt('012') -> 10 
(verdier som starter på 0 tolkes som oktale)
parseInt('12',8) -> 10
parseInt('0x12') -> 18 
(verdier som starter på 0x tolkes som hexadesimale)
parseInt('12',16) -> 18
parseInt('jensen') -> NaN
parseInt('14jens',5) -> 9

Merk igjen at ikke-numeriske verdier på slutten av en god begynnelse ignoreres, og at når funksjonen feiler returnerer den verdien NaN. Vi kan teste om en verdi er Nan med funksjonen: isNaN(verdi), se nedenfor.

Du kan forsøke deg fram med noen konverteringer nedenfor (skriv inn en string og eventuelt tallsystemet du vil bruke og trykk på likhetstegnet)

parseInt(' ', ) ?

isNaN(verdi)

isNaN står for "Not-a-Number". Denne funksjonen kan brukes for å teste om en verdi er et gyldig tall, flytetall eller heltall.

function testNan1(){
    var a="jensen"
    if(isNaN(a))
        alert("ooops, a er ikke et tall");
    else
        alert("it is a number");
}
function testNan2(){
    var a="21.7oggodjulallesammen";
    var t=parseFloat(a);
    if(isNaN(t))
        alert("ooops");
    else
        alert(t);
}

Test:

Test:

infinity

Merk at en divisjon med 0 ikke slår ut med isNan() true. Vi får en egen verdi: infinity

function Divide(){
    var a=21;
    var b=0;
    var c=a/b;
    if(isNaN(c))
        alert("ooops");
    else
        alert(c);
}

Test:

Math

Vi finner det vi forventer i objektet math. De vi oftest trenger er kanskje:

  abs(x)
  sin(x),cos(x),tan(x)
  max(x,y),min(x,y)
  ceil(x),floor(x),round(x)
  pow(x,y),exp(x),sqrt(x),log(x)
  random()

random-funksjonen returnerer et flytetall mellom 0 og 1. Hvis vi vil ha en funksjon som returnerer et heltall mellom to grenser a <= t <=b kan vi skrive en slik funksjon:

function randint(a,b){
  return (Math.floor(Math.random()*(b-a+1)))+a;
}

Testen ser slik ut:

function doRandomTest(n,a,b){
  T=''+n+ ' tester av randint('+a+','+b+'): ';
  for (var ix=0;ix < n; ix++)
    T=T+' '+randint(a,b);
  document.getElementById('randomresult').innerHTML=T;
}

Du kan inspisere en grafisk framstilling av en test av algoritmen:

Test random https://borres.hiof.no/wep/js/jstall/histogram.html

Noen begreper >Tall