FAQ | Points | Add... | Recent posts | Search | Register | Log in


[Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> AVR Microcontrollers -> [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT
Author
Message
fliper_katrill
Poziom 18
Poziom 18


Joined: 14 Dec 2004
Posts: 530
Location: Darłowo

Post#1 Post from the author of the topic 20 Mar 2010 01:25   

[Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


Witam kolegów!
Mam taki problem, na początek troszkę teorii:
ROUND
Przeznaczenie:
Zwraca liczbę zaokrągloną do najbliższej wartości całkowitej.

Składnia:
zmienna = ROUND( wartość )

gdzie:
zmienna - dowolna zmienna typu Single, do której wpisana będzie wynik działania funkcji,
wartość - liczba którą całkowita część powinna być zwrócona.

Opis:
Funkcja dokonuje zaokrąglenia podanej wartości do najbliższej wartości całkowitej. Jeśli część ułamkowa będzie mniejsza niż 0.5 zwracana będzie tylko część całkowita. Jeśli natomiast będzie większa – zwracana będzie część całkowita powiększona o jeden.

INT
Przeznaczenie:
Zwraca całkowitą cześć podanej liczby.

Składnia:
zmienna = INT( wartość )

gdzie:
zmienna - dowolna zmienna, do której wpisana będzie całkowita część podanej liczby,
wartość - liczba której całkowita część powinna być zwrócona.

Opis:
Część ułamkowa to wszystkie liczby znajdujące się po kropce z prawej strony. Część całkowita to ta znajdująca się przed kropką.
Dla przykładu liczba 1234.567 posiada część całkowitą: 1234 i ułamkową: 567.

No i teraz kod który powinien działać a nie działa:
Code:

Dim Co2_w As Single
Dim Co2 As Single
...
 Co2 = Round(co2_w)   
...


liczba rzekomo zaokrąglona ma w obu przypadkach zastosowań postać xxxxx.0
Co robię nie tak?
Back to top
   
Dżyszla
Poziom 24
Poziom 24


Joined: 15 May 2005
Posts: 4528
Location: Żory (kiedyś Opole)

Post#2 20 Mar 2010 07:46   

Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


Ale Round zwraca liczbę całkowitą, a nie zmiennoprzecinkową. Nie ma sensu przypisywać jej do zmiennej typu single.

Skoro już teoria była, to zabrakło jej ważnego wskazania - działania funkcji Round przy wartości x.5. Tutaj, w zależności od kompilatora, metody spotyka się następujące (pod względem popularności): Amerykańska - zaokrąglane w górę, jeśli liczba przed przecinkiem jest parzysta, lub w dół dla nieparzystych (istnieje też odwrotność tej reguły); Druga - zawsze w górę; Trzecia - zawsze w dół; Czwarta - może być zastosowany element losowości.
Back to top
   
Google

Google Adsense


Post# 20 Mar 2010 07:46   





Back to top
   
atom1477
Poziom 25
Poziom 25


Joined: 14 Jul 2005
Posts: 6360

Post#3 20 Mar 2010 10:44   

Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


Dżyszla wrote:
Ale Round zwraca liczbę całkowitą, a nie zmiennoprzecinkową.

Zwraca i całkowitą i zmiennoprzecinkową jednocześnie. To znaczy liczbę całkowitą zapisaną jako liczba zmiennoprzecinkowa. Przecież liczba zmiennoprzecinkowa też może być całkowita.

Dżyszla wrote:
Nie ma sensu przypisywać jej do zmiennej typu single.

Jest sens. Są algorytmy które wymagają zaokrąglania i dalszych skomplikowanych operacji (zmiennoprzecinkowych). Po co wynik wpisywać do zmiennej np. typu Long i później przepisywać go do zmiennej typy Single skoro od razu wynik można wpisać do zmiennej typu Single?
No i poza tym, nawet jeżeli sensu to nie ma, to to powinno działać.
Kompilator coś miesza.
Back to top
   
fliper_katrill
Poziom 18
Poziom 18


Joined: 14 Dec 2004
Posts: 530
Location: Darłowo

Post#4 Post from the author of the topic 20 Mar 2010 12:32   

Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


To może koledzy mają jakiś inny sposób na zamianę liczby z postaci zmiennoprzecinkowej w całkowitą?
Back to top
   
atom1477
Poziom 25
Poziom 25


Joined: 14 Jul 2005
Posts: 6360

Post#5 20 Mar 2010 12:53helpful post - solution   

Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


fliper_katrill wrote:
To może koledzy mają jakiś inny sposób na zamianę liczby z postaci zmiennoprzecinkowej w całkowitą?

No to w końcu chcesz mieć liczbę całkowitą w zmiennej zmiennoprzecinkowej czy liczbę całkowitą w zmiennej całkowitej?

Jak to drugie, no to Round:
Code:

Dim Co2_w As Single
Dim Co2_int As Long
...
Co2_int = Round(co2_w)


Niezgodnie z Helpem BASCOMa, ale działa.
Back to top
   
Google

Google Adsense


Post# 20 Mar 2010 12:53helpful post - solution   





Back to top
   
fliper_katrill
Poziom 18
Poziom 18


Joined: 14 Dec 2004
Posts: 530
Location: Darłowo

Post#6 Post from the author of the topic 20 Mar 2010 13:22   

Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


To odpowiem może wymijająco (bo nie do końca kojarzę różnicę) , że nie mam mieć kropek i po kropce nic ;p
Back to top
   
janbernat
Poziom 23
Poziom 23


Joined: 21 Oct 2008
Posts: 3680
Location: Warszawa

Post#7 20 Mar 2010 13:43   

Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


"Niezgodnie z Helpem BASCOMa, ale działa."
Chyba zgodnie.
Część ułamkowa będzie odcięta.
A fliper_katrill-owi chyba chodzi o wyświetlanie.
Back to top
   
fliper_katrill
Poziom 18
Poziom 18


Joined: 14 Dec 2004
Posts: 530
Location: Darłowo

Post#8 Post from the author of the topic 20 Mar 2010 14:03   

Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


tak o wyświetlanie :)
Back to top
   
janbernat
Poziom 23
Poziom 23


Joined: 21 Oct 2008
Posts: 3680
Location: Warszawa

Post#9 20 Mar 2010 14:09   

Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


To sięgnij po" fusing" dla single i "format" dla reszty.
Back to top
   
atom1477
Poziom 25
Poziom 25


Joined: 14 Jul 2005
Posts: 6360

Post#10 20 Mar 2010 14:46   

Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


fliper_katrill wrote:
To odpowiem może wymijająco (bo nie do końca kojarzę różnicę) , że nie mam mieć kropek i po kropce nic ;p

To spytał bym tak: chcesz mieć wynik z kropką i częścią ułamkową, ale częścią ułamkową równą zero: czyli xxx.00000?. Czyli wynik w zmiennej typu Single?
Czy wynik bez części ułamkowej: xxx? Czyli wynik w zmiennej typu Integer?

Ale już nie spytam bo już wiem ;)


janbernat wrote:
"Niezgodnie z Helpem BASCOMa, ale działa."
Chyba zgodnie.
Część ułamkowa będzie odcięta.

Nie jest zgonie z Helpem. Zgodnie z Helpem Round zwraca wynik typy Single.
Ale to nie działa. Działa za to zwracanie wyniku typu Integer co już jest niezgodne z Helpem.
Nie chodzi mi o sam fakt zaokrąglania, ale o typ zwracanej wartości: Single albo Integer.
Back to top
   
Google

Google Adsense


Post# 20 Mar 2010 14:46   





Back to top
   
fliper_katrill
Poziom 18
Poziom 18


Joined: 14 Dec 2004
Posts: 530
Location: Darłowo

Post#11 Post from the author of the topic 20 Mar 2010 15:02   

Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT


to tak podsumowując jaka jest moja potrzeba:
obliczenia odbywają się na singlach ja potrzebuję WYŚWIETLIĆ wynik w postaci dokładnie 5 cyfr XXXXX bez kropek i części ułamkowych a czy one będą zaokrąglane czy obcinane to już mniejsza o to :)

chciałbym najszybszym sposobem uzyskiwać zapis np:

00055
01342
00002
12345

zawsze 5 znaków

(teraz myślę, uwzględniając Wasze posty, o fusing, wcześniej chciałem tylko 1,12,345,5644 bez zer, problemem było wyświetlanie części ułamkowych i kropek których nie chcę)
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> AVR Microcontrollers -> [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT
Page 1 of 1
Similar topics
[Bascom] Dziwny problem z funkcjami (4)
[Bascom] Mały problem z funkcjami (1)
Zaokąglanie liczb , przejścia typu float <->int (10)
dziwne zaokrąglanie zmiennej SINGLE - Bascom 1.11.8.7 (2)
[C++] Łączenie liczb int w jedną (5)
[BASCOM] Średni wynik z ADC i problem z funkcją Round (9)
Zaokrąglanie liczb w J2ME (4)
Konfiguracja układu PCF 8563 (bascom , int) (1)
[ATmega8][Bascom]Ultradzwięki-Badanie odległości z INT i Tim (7)
[bascom] wyświetlanie liczb całkowitych (4)

Page generation time: 0.065 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed