Avatar billede themepark Nybegynder
29. august 2003 - 12:26 Der er 8 kommentarer og
1 løsning

Fjern decimaler

Igen er vi for så vidt ude i det temmeligt enkle.

Hvordan kan man med JavaScript fjerne decimal delen af et tal? Jeg ville da formode at der skulle være en funktion i JavaScript, således at jeg ikke selv skal programmere en.

Math.Floor kender jeg godt, men problemet med den er at med negative tal som f.eks. -2.95 afrunder den til -3...hvor jeg vil have -2 i stedet for.
Avatar billede mm12010 Nybegynder
29. august 2003 - 12:42 #1
Math.Round()
Avatar billede themepark Nybegynder
29. august 2003 - 12:56 #2
Ja, men den afrunder også...ikke fjerner. Hvis jeg så f.eks. har 2.55, vil det blive til 3, hvor det skal være 2, da decimal delen skal fjernes.
Avatar billede mm12010 Nybegynder
29. august 2003 - 13:07 #3
tal = "-2.95";
tal = String(tal);
tal = (tal.indexOf(".")!=-1)?tal.substring(0,tal.indexOf(".")-1):tal;
Avatar billede nmh Nybegynder
29. august 2003 - 14:47 #4
Avatar billede nmh Nybegynder
29. august 2003 - 14:54 #5
De negative tal giver problemer.
Gør f.eks. således
if (x<0){
  x=Math.floor(x)+1
}else{
  x=Math.floor(x)
}
Avatar billede grunken Nybegynder
29. august 2003 - 18:26 #6
der er jo fine js-funktioner til det hele ;), men man er nødt til at lave en lille sætning!

tal = -2.95;
tal = (tal<0)?Math.ceil(tal):Math.floor(tal);

men alle forslag virker jo ;), så det er bare at vælge fremgangsmetode ;)
Avatar billede themepark Nybegynder
02. september 2003 - 17:11 #7
Noget tid efter at have stillet spørgsmål gik jeg hjem, med en beslutning om at prøve at finde ud af om jeg dog ikke kunne finde en måde at beregne Int og Mod på et tal, rent matematisk med JavaScript, uden alle disse if sætninger og jeg ved snart ikke hvad.

Det tog mig en time, og så havde jeg regnet den ud, så at sige...and for your viewing pleasure, here's how ;-)

Lad os sige, at man har et tal, x, som man gerne vil have heltalsdelen (Int) af. Så har jeg regnet mig frem til at følgende sætning skulle kunne gøre det (og da jeg skal bruge denne beregning senere, angiver jeg den til at være y :-)

y=Math.floor(Math.abs(x))*(x/Math.abs(x))

Og for at bevise, at jeg ikke har ramt helt ved siden af, prøver jeg lige med 2 værdier (x=2,5 og x=-4,25)

y=Int(x):

y=Math.floor(Math.abs(2,5))*(2,5/Math.abs(2,5))
y=Math.floor(2,5)*(2,5/2,5)
y=2*1
y=2

y=Math.floor(Math.abs(-4,25))*(-4,25/Math.abs(-4,25))
y=Math.floor(4,25)*(-4,25/4,25)
y=4*-1
y=-4

Mht at finde en rest af en division (Mod funktionen), skal man jo bruge 2 tal, som jeg så har valgt at kalde a og b. Og funktionen er så således (hvor beregningen så indsættes i variablen z).

z=a mod b

z=(x-y)*b

Eller hvis det skal være helt nøjagtigt.

z=((a/b)-Math.floor(Math.abs(a/b))*((a/b)/Math.abs(a/b)))*b

Og for nu at bevise det, bruger vi a=5 og b=4, samt a=-25 og b=10.

z=((5/4)-Math.floor(Math.abs(5/4))*((5/4)/Math.abs(5/4)))*4
z=(1,25-Math.floor(Math.abs(1,25))*(1,25/Math.abs(1,25)))*4
z=(1,25-Math.floor(1,25)*(1,25/1,25))*4
z=(1,25-1*1)*4
z=(1,25-1)*4
z=0,25*4
z=1

z=((-25/10)-Math.floor(Math.abs(-25/10))*((-25/10)/Math.abs(-25/10)))*10
z=(-2,5-Math.floor(Math.abs(-2,5))*(-2,5/Math.abs(-2,5)))*10
z=(-2,5-Math.floor(2,5)*(-2,5/2,5))*10
z=(-2,5-2*-1)*10
z=(-2,5--2)*10
z=(-2,5+2)*10
z=-0,5*10
z=-5

Voila :-) Sværere er det faktisk ikke :-) If you want, please feel free to copy and paste this...and if you do not want...it's your loss ;-)
Avatar billede nmh Nybegynder
02. september 2003 - 17:46 #8
Hvis du vil undgå en fejl bliver du nødt til at forudsætte at x ikke er 0.
Så din metode til at fjerne decimaler lyder nu:
if (x!=0)then {
  x=Math.floor(Math.abs(x))*(x/Math.abs(x))
}else{
  x=0
}
Det er iøvrigt en langt mere tidkrævende metode, end f.eks.
grunkens: x=(x<0)?Math.ceil(x):Math.floor(x)
Avatar billede themepark Nybegynder
02. september 2003 - 17:49 #9
Hmm...ja ja, helt perfekt er jeg altså ikke...pokkers også ;-)

Jeg kan godt se, hvad du mener...man kan jo (desværre) ikke dividere med 0 :-(

Tidskrævende? Tja, jeg formoder, du taler om hvor lang tid, procesorren bruger på at gennemkøre det, men jeg tror da ikke der vil være en synlig tidsforskel :-)

Og som sagt...jeg foretrækker at gøre tingene rent matematisk, hvis overhovedet muligt ;-)
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