| Author |
Message
|
fliper_katrill Poziom 18

Joined: 14 Dec 2004 Posts: 530 Location: Darłowo
|
#1
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

Joined: 15 May 2005 Posts: 4528 Location: Żory (kiedyś Opole)
|
#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

|
#
20 Mar 2010 07:46 |
|
|
|
|
|
| Back to top |
|
 |
atom1477 Poziom 25

Joined: 14 Jul 2005 Posts: 6360
|
#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

Joined: 14 Dec 2004 Posts: 530 Location: Darłowo
|
#4
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

Joined: 14 Jul 2005 Posts: 6360
|
#5
20 Mar 2010 12:53 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

|
#
20 Mar 2010 12:53 |
|
|
|
|
|
| Back to top |
|
 |
fliper_katrill Poziom 18

Joined: 14 Dec 2004 Posts: 530 Location: Darłowo
|
#6
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

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#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

Joined: 14 Dec 2004 Posts: 530 Location: Darłowo
|
#8
20 Mar 2010 14:03 Re: [Bascom]Zaokrąglanie liczb funkcjami ROUND i INT |
|
|
|
tak o wyświetlanie :)
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#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

Joined: 14 Jul 2005 Posts: 6360
|
#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

|
#
20 Mar 2010 14:46 |
|
|
|
|
|
| Back to top |
|
 |
fliper_katrill Poziom 18

Joined: 14 Dec 2004 Posts: 530 Location: Darłowo
|
#11
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 |
|
 |