zamiana typów (real, integer)

zamiana typów (real, integer)
VO
  • Rejestracja:prawie 21 lat
  • Ostatnio:prawie 17 lat
0

Witam
Czy jest jakiśbezbolesny sposób żeby zamienić liczbę integer na real i real na integer?
Jak wygląda zaokrąglanie w takich przypadkach?

Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:29 minut
0

funkcja Trunc() obcina część ułamkową, natomiast Round() zaokrągla zmiennoprzecinkową na całkowitoliczbową.

BTW. Real nie powinno się używać, wiesz o tym?

LukaStrz
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 7 lat
0

BTW: Czemu real sie nie powino używać? :>


Sun Certificated Java Programmer 6
flabra
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
0

Bo real (48-bitowy) nie jest typem sprzętowym koprocesora. Jego obsługą zajmuje się program i procesor. Ma w związku z tym inna budowę (zamienionaa cecha z mantysą) i jest sporo wolniejsze (cos mi się wydaje, że to jest w helpie).


Linuksa, czy innego Uniksa, można opisać za pomocą logiki boolowskiej a nie za pomocą prawdopodobieństwa. 'System szesnastkowy jest wspaniały! W skali od 1 do 10 daję mu E' extreme safety for Ubuntu:
sudo echo -e 'Defaults targetpw\nDefaults timestamp_timeout=0' >> /etc/sudoers
VO
  • Rejestracja:prawie 21 lat
  • Ostatnio:prawie 17 lat
0

to w jaki inny sposób podzielić 10 zł na 3600 sekund?

AB
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 lat
0

To proste dzielisz 2 razy przez div czyli wynik liczby całkowitej oraz mod reszta z dzielenia w postaci liczby całkowitej czli:

Kopiuj
Var
caly,reszta:longint;
begin
caly:=10 div 3600;
reszta:=10 mod 3600;
end;
VO
  • Rejestracja:prawie 21 lat
  • Ostatnio:prawie 17 lat
0
Kopiuj
reszta:=10 mod 3600;
showmessage(IntToStr(reszta));

i wynik dostaję '10', a wg kalkulatora Windows wynik to 0.00277777....
czyli powinienem otrzymać '002777...'

czegoś tu nie rozmumiem

foflik
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 17 lat
0

czegoś tu nie rozmumiem

Widocznie nie wiesz co to jest reszta z dzielenia. Podziel to co uzyskales za pomoca mod przez dzielnik czyli 10 / 3600 i bedziesz mial 0,002777...

VO
  • Rejestracja:prawie 21 lat
  • Ostatnio:prawie 17 lat
0

czyli 10 / 3600 i bedziesz mial 0,002777...

I mamy liczbę zmiennoprzecinkową.
Ale mi chodziło o to żeby wynik moża było zapisać jako integer.
Czyli "calosc.reszta"
Jeśli reszta z dzielenia 10 / 3600 = 10, to wychodzą mi jakieś bzdury.

Chyba najłatwiej będzie to zrobić na liczbach real.

To nie jest jakiś skomplikowany program. Tylko się bawię i poznaję ten język więc mam z tym pewne kłopoty

AB
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 lat
0

Niestety ale zła wiadomość dla Ciebie.
Funkcja mod podaje resztę z dzielenia ale w jej 10 części.
trudno byłoby zpisać w INTEGER liczbę = 0022777 bo atomatycznie będzie to 22777
Możesz to zrobić tak :

  1. jeśli Ci zależy do 1/1000 to reszta:=(10*1000) div 3600
  2. 1/1000000 to reszta:=(10*1000000) div 3600

Najważniejsze to pomysł !!!

Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:29 minut
0

nie, czekajcie! nie chodziło mi o to aby zrezygnować z liczb zmiennoprzecinkowych, ale o to, ze klasyczny Real jest typem 6-bajtowym, który nie ma odwzorowania w typach procesora jak to flabra napisał. Mozna używać innych typów zmiennoprsecinkowych np. double.

Początwszy od Delphi 4 zdaje się type Real jest to to samo co typ Double, a klasyczny, Turbo pascalowy Real nazywa się Real48. Ale już w Delphi 8 i zapewne w przyszłym Diamondbacku określenia typu Real, jak i Real48 NIE MA. Tutaj chciałem jedynie podkreślić kwestię przyszłej kompatybilności.

Deti
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
0

Ja tylko chciałem wyprostować.. niektórzy źle rozumieją tu znaczenie słowa "mod" - reszta z dzielenia..

Weźmy przykład:

5 : 2 = 2.5

<font color="olive">5 div 2</span> - oznacza część całkowitą z dzielenia 5 przez 2, która jest równa 2

<font color="olive">5 mod 2</span> - oznacza resztę z dzielenia 5 przez 2, która nie jest równa 5 jak w zapisie 2.5.

Dzielę 5 przez 2. Dwójka mieści się 2 razy w liczbie 5 - to daje 4 - zostaje 1, i to jest właśnie 5 mod 2.

Inny przykład: 10 : 4

10 div 4 = 2
// Bo 2 razy się mieści
10 mod 4 = 2

// Bo tyle zostaje

A nie "10 mod 4 = 5" - to jest błąd!


VO
  • Rejestracja:prawie 21 lat
  • Ostatnio:prawie 17 lat
0

A jak zamienić liczbę rzeczywistą = 0.0002345 na string i jak taki string zamienić na liczbę rzeczywistą?

Cool_Programming
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 7 lat
0
Kopiuj
FloatToStr, StrToFloat 
VO
  • Rejestracja:prawie 21 lat
  • Ostatnio:prawie 17 lat
0

Ok, wielkie dzięki. Program już liczy :)
Jeszcze jedno pytanko, jak to zaokrąglić do 2 miejsca po przecinku?
z 1.234567 zrobić 1.23
W TP trzeba było napisać :2
w OP nie chce mi tego kompilować :(

Cool_Programming
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 7 lat
0
Kopiuj
FormatFloat('0.00',1.234567)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.