typ single i jego dziwne wartości...

0

Witam :]
Mam taki problem:

mam sobie record:

   type TZeskok=record
          Gr1:Single;
          Gr2:Single;
        end;
(...)
var Sko:TZeskok;

I teraz w czasie działania programu użytkownik podaje jakieś tam wartości do Edit'ów (np: 0,2 dla Gr1) i on są zapisywane do tej zmiennej. Potem zapisuje to do pliku typowanego i ja odcztuje zamiast 0,2 dostaje np: 0,200000002980232.

I teraz moje pytanko: czy jest jakis sposób aby temu zaradzić ??? Czy jedym wyjściem jest walnięcie tego do stringa, obcięcie i z powrotem do Singla???
Pozdr.

0

Wynika to zapewne ze sposobu przechowywania liczb rzeczywistych w pamięci komputera. Sposób obejścia - dość prosty: użyj funkcji RoundTo :)
Pozdrawiam

0

no, w sumie najlepiej roundTo bo typ single stosuje sie do wartosci ktorych zasieg ni przekracza wiecej jak 7-8 miejsc po przecinku i co sie dzieje po tym 7,8 miejscu to juz straszny shitt: ojawiaja sie rozne wartosci i caly dodatkowy szajs z obsluzeniem tego problemu. Przejdz na Double albo ToundTo.

0

a jak chcesz równo zapisać 0.2 za pomocą potęg dwójki? przecież 0.2 ma nieskończone rozwinięcie w szereg 2^-n

0

[...]

Mozesz tez uzyc typu currency - ma dokladnosc do 4 miejsc po przecinku, wiec bedzie Ci obcinal niedokladnosci na dalszych miejscach.

0

najlatwiej Ci bedzie tak:
var
zmienna : double;

begin

StrToFloat(zmienna); // nie musze chyba tego tu tłumaczyć

FloatToStr(zmienna); // j.w.

wiem, ze to glupie, ale bedzie chyba najlatwiej i nie bedzie zadnych śmieci na końcu. Życzę powodzenia z tym

0

Dobra Kęczek ;) temat już dawno nie aktualny
btw: Nie używałem Double bo zależało mi na jak najmniejszej wielkości pliku typowanego ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1