|
| double 54.60 bliver til 54.599998 Fra : jma |
Dato : 09-05-06 09:22 |
|
Hej NG,
Jeg læser en række tal fra en configurations fil. I de fleste tilfælde
sættes værdien korrekt til præcis det tal som står i configurationsfilen.
Men nogle gange ændres tallet som f.eks. 54.60 bliver til 54.599998 - og
det forstår jeg slet ikke! Er der nogen som kan give mig en god grund? Jeg
vil helst bruge et "rundt tal".
Jeg vil ikke sætte koden ind med mindre nogen ønsker det. Men umiddelbart
burde programmet blot læse værdien fra tekst filen og sætte variablen til
denne.
/Jan
| |
jma (09-05-2006)
| Kommentar Fra : jma |
Dato : 09-05-06 09:28 |
|
On Tue, 09 May 2006 10:22:26 +0200, jma wrote:
> Hej NG,
> Jeg læser en række tal fra en configurations fil. I de fleste tilfælde
> sættes værdien korrekt til præcis det tal som står i configurationsfilen.
>
> Men nogle gange ændres tallet som f.eks. 54.60 bliver til 54.599998 - og
> det forstår jeg slet ikke! Er der nogen som kan give mig en god grund? Jeg
> vil helst bruge et "rundt tal".
>
> Jeg vil ikke sætte koden ind med mindre nogen ønsker det. Men umiddelbart
> burde programmet blot læse værdien fra tekst filen og sætte variablen til
> denne.
En løsning kunne være at afrunde til 2 decimailer, men jeg ved ikke
hvordan det gøre i c. Nogen som kan give mig et hint?
| |
jma (09-05-2006)
| Kommentar Fra : jma |
Dato : 09-05-06 09:32 |
|
On Tue, 09 May 2006 10:27:56 +0200, jma wrote:
> On Tue, 09 May 2006 10:22:26 +0200, jma wrote:
>
>> Hej NG,
>> Jeg læser en række tal fra en configurations fil. I de fleste tilfælde
>> sættes værdien korrekt til præcis det tal som står i configurationsfilen.
>>
>> Men nogle gange ændres tallet som f.eks. 54.60 bliver til 54.599998 - og
>> det forstår jeg slet ikke! Er der nogen som kan give mig en god grund? Jeg
>> vil helst bruge et "rundt tal".
>>
>> Jeg vil ikke sætte koden ind med mindre nogen ønsker det. Men umiddelbart
>> burde programmet blot læse værdien fra tekst filen og sætte variablen til
>> denne.
>
> En løsning kunne være at afrunde til 2 decimailer, men jeg ved ikke
> hvordan det gøre i c. Nogen som kan give mig et hint?
Nå nu fandt jeg fejlen. Det var selvfølgelig en fejl... Spørgsmålet hermed
lukket! Der skete en "forkert" konvertering fra float til double sted...
| |
Bertel Lund Hansen (09-05-2006)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 09-05-06 10:44 |
|
jma skrev:
> En løsning kunne være at afrunde til 2 decimailer, men jeg ved ikke
> hvordan det gøre i c. Nogen som kan give mig et hint?
double tal;
tal=54,59998;
printf("%6.2",tal);
6 afsætter 6 pladser i alt til tallet, mens 2 sikrer at der
afrundes til 2 decimaler.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
jma (09-05-2006)
| Kommentar Fra : jma |
Dato : 09-05-06 14:14 |
|
On Tue, 09 May 2006 11:44:11 +0200, Bertel Lund Hansen wrote:
> jma skrev:
>
>> En løsning kunne være at afrunde til 2 decimailer, men jeg ved ikke
>> hvordan det gøre i c. Nogen som kan give mig et hint?
>
> double tal;
>
> tal=54,59998;
> printf("%6.2",tal);
>
> 6 afsætter 6 pladser i alt til tallet, mens 2 sikrer at der
> afrundes til 2 decimaler.
Tak for det
| |
Bertel Lund Hansen (09-05-2006)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 09-05-06 15:02 |
|
jma skrev:
>> double tal;
>> tal=54,59998;
>> printf("%6.2",tal);
>> 6 afsætter 6 pladser i alt til tallet, mens 2 sikrer at der
>> afrundes til 2 decimaler.
> Tak for det
Der var kun to fejl på 3 linjer:
1. tal=54.59998;
2. Der mangler et f som er koden for double:
printf("%6.2f",tal);
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
| |
Niels Dybdahl (09-05-2006)
| Kommentar Fra : Niels Dybdahl |
Dato : 09-05-06 09:58 |
|
"jma" <jpeace73@hotmailFJERNTHIS.com> wrote in message
news:pan.2006.05.09.08.22.25.48771@hotmailFJERNTHIS.com...
> Hej NG,
> Jeg læser en række tal fra en configurations fil. I de fleste tilfælde
> sættes værdien korrekt til præcis det tal som står i configurationsfilen.
>
> Men nogle gange ændres tallet som f.eks. 54.60 bliver til 54.599998 - og
> det forstår jeg slet ikke! Er der nogen som kan give mig en god grund? Jeg
> vil helst bruge et "rundt tal".
Man kan ikke angive tallet 54.60 præcist med den talrepræsentation som
normalt bruges i en PC. Den er baseret på 2-talssystemet og decimaltal skal
angives som en sum af nogle af tallene 0.5 0.25 0.125 0.0625 etc
Så tallet 54.6 er ikke blevet "ændret" til 54.599998. Det har simpelthen
aldrig været 54.6
Niels Dybdahl
| |
|
|