Avatar billede screwdriver Nybegynder
15. december 2005 - 10:38 Der er 5 kommentarer

Korrekt afrunding af floats

Hej

jeg har været inde og kigge på et par forskellige spørgsmål her på eksperten, men selvom andre har spurgt om ca. det samme har jeg ikke kunnet få noget at deres kodeeksembler til at virke korrekt.

jeg skal afrunde to tal hvor 0,5 runder op (Dvs. alm. skole afrunding.) jeg ska dog gøre det på anden desimal.

dvs. 0,35 = 0,4
Jeg har prøvet med følgende:

X := 0.35 ;
if RealRound ( 10 * X ) > RealRound ( 10 * 0.3 ) then

Som afrunding har jeg prøvet med :

function RealRound(X: extended): int64;
var
  i: int64;
begin
  i := Round(x);
  if i - Round(x + 1) <> 0 then inc(i);
  result := i;
end;

Problemet er at den runder også 0.3 * 10 til 4, og så er jeg jo lige vidt
Avatar billede arne_v Ekspert
15. december 2005 - 14:31 #1
trunc(10 * x + 0.5) / 10

måske
Avatar billede screwdriver Nybegynder
15. december 2005 - 14:38 #2
Hej arne_v

håbede du ville svare, da jeg kan se at du har rimeligt godt styr på floats, med de andre svar du har givet herinde :-)

Jeg har set en del andre steder at man skal gøre således:

function CorrectRound ( X : Extended ) : Int64 ;
var
  i: int64;
begin
  Result := Trunc(x);
  if (Frac(x) >= 0.5) then
    Result := Result + 1;
end;

men det virker heller ikke...
Så nu gør jeg sådan :
  if (Frac(x) >= 0.49999) then

Fordi du skrev tidligere at man skal beslutte hvor stor upræcition man vil tillade ... og jeg har kun brug for 3 decimaler.
Men er dette virkelig den bedste måde ?
Avatar billede arne_v Ekspert
15. december 2005 - 15:32 #3
Result := Trunc(x);
  if (Frac(x) >= 0.5) then
    Result := Result + 1;

og

Trunc(x + 0.5)


Den almindelige Round bruger bankers rounding, hvilket ikke altid er godt i DK

Kan du forklare lidt mere om konteksten hvor komemr tallene fra og hvordan skal
de bruges ?  Det vil gøre det nemmere at komme med en anbefaling.
bør give det samme
Avatar billede arne_v Ekspert
12. marts 2006 - 06:05 #4
Kommet videre ?
Avatar billede screwdriver Nybegynder
23. oktober 2014 - 08:08 #5
Hej Arne

Jeg er lige ved at ryde op i mine gamle spørgsmål, og kan se at jeg skylder dig 60 point ... spørgsmålet er hvad renten er på 9 år ;-)
Smid et svar, ellers lukker jeg det bare
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