Avatar billede kasparov Nybegynder
10. december 2001 - 18:50 Der er 17 kommentarer og
1 løsning

Hurtig afrunding af en double....

Lige et hurtigt lille spørgsmål:

hvordan afrunder jeg hurtigst en doubleværdi til eksempelvis 2 decimaler?
Avatar billede erikjacobsen Ekspert
10. december 2001 - 18:57 #1
Avatar billede greybeard Nybegynder
10. december 2001 - 19:06 #2
    double toDec;

    toDec=((int)(toDec* 100 + 0.5) /100);
Avatar billede bearhugx Nybegynder
10. december 2001 - 19:10 #3
Quick-and-dirty :

her er en version, som kan tage et vilkårligt antal decimaler...
(Jeg er dog sikker på, at det kan gøres pænere)

private double afrund( double tal, int decimaler )
{
    int e = (int)Math.pow(10.0, (double)decimaler );
    int i = (int)(e*tal);
    tal = (double)(i);
    tal = tal/e;
    return tal;
}

/Søren
Avatar billede bearhugx Nybegynder
10. december 2001 - 19:13 #4
hmm .. åbenbart behøver jeg ikke at putte \'.0\' på titallet eller caste (double) i Math.pow()-sætningen ...

dette virkere også : int e = (int)Math.pow(10, decimaler );
Avatar billede greybeard Nybegynder
10. december 2001 - 19:14 #5
bearhugx
Den har den fejl at den ikke afrunder, men runder ned.
int i = (int)(e*tal);
skulle se sådan her ud
int i = (int)(e*tal + 0.5);
Avatar billede erikjacobsen Ekspert
10. december 2001 - 19:15 #6
Er det til udskrift får man en del forærende:

  double f = 123121.567567;
  DecimalFormat toDecimaler = new DecimalFormat(\"0,000.00\");
  System.out.println(\"Tallet er \"+toDecimaler.format(f));

vil udskrive

  Tallet er 123.121,57
Avatar billede erikjacobsen Ekspert
10. december 2001 - 19:16 #7
Og man kan nøjes med DecimalFormat(\"0.00\") hvis man ikke
skal have 1000-separatorer.
Avatar billede bearhugx Nybegynder
10. december 2001 - 19:20 #8
Du har ret - min afrunder ikke - men trunkerer...
Jeg havde ikke tænkt på afrundingen...
men hvorfor lige 0.5 ???

/Søren

*begynder dog virkeligt at kunne lide Eriks, når det er til udskrifter :-)*
Erik >> findes den også i 1.3 ??
Avatar billede erikjacobsen Ekspert
10. december 2001 - 19:21 #9
Ja ja, da - også i 1.3
Avatar billede greybeard Nybegynder
10. december 2001 - 19:29 #10
bearhugx
0.5 fordi decimaldelen der smides væk er mindre en ½ , så er  den stadig mindre end 1/1 efter at have lagt ½ til, og bliver stadig trunkeret, men hvis decimaldelen > ½ , så for du en mindre decimaldel, men en én større heltalsdel

1.4999 + 0.5 = 1.9999: castet bliver til int det 1
1.5 + 0.5 = 2 : castet til int bliver det 2

Jeg kan også lide Eriks, og den er noget mere overskuelig i eksemplet end vist via linket.
Faktisk kunne man parse den tilbage til double, men det er nok en omvej.
Avatar billede kasparov Nybegynder
10. december 2001 - 19:29 #11
Tror også erik\'s metode er smartest, de andre ser ud til at runde ned

- kunne være rart hvis det havde stået som et svar i stedet for en kommentar, da jeg ellers er i tvivl om hvordan og hvorledes med de points...(?)
Avatar billede greybeard Nybegynder
10. december 2001 - 19:33 #12
Hvis du husker at lægge den halve til runder de ikke ned.
Hvis du kun skal bruge det til udskrift, så brug Eriks.
Avatar billede erikjacobsen Ekspert
10. december 2001 - 19:35 #13
gider ikke have point for ingenting :)
Avatar billede kasparov Nybegynder
10. december 2001 - 19:37 #14
Det var til udskrift, da double værdien ikke bruges videre

- regner med at bruge eriks, men da han ikke \"svarede\" får greybeard de 15 points - han har trods alt også lagt noget tankevirksomhed i spørgsmålet... ;)
Avatar billede bearhugx Nybegynder
10. december 2001 - 19:54 #15
*S* jeg synes, det er en underlig sætning - \"har trods alt også lagt noget tankevirksomhed i spørgsmålet\"...

Jeg tror vi alle (både Erik GreyBeard og jeg ) har brugt tankevirksomhed :-))

nuvel ...

/Søren
Avatar billede greybeard Nybegynder
10. december 2001 - 19:58 #16
Takker med rødmende kinder. Ved ikke hvor fortjent det var.
Avatar billede kasparov Nybegynder
10. december 2001 - 20:45 #17
bearhugx> hmmm, måske ikke lige den den bedste formulering fra min side; det var jo ikke sådan ment... :) *g*

Glad for at få så mange kvalificerede svar på et relativt simpelt newbie spørgsmål!
Avatar billede bearhugx Nybegynder
10. december 2001 - 20:49 #18
*S*
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
Kurser inden for grundlæggende programmering

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