Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Overflow?!
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003
Overflow?!

Mam bardzo prościutką funkcję przeliczającą % na twp:

Function Przelicz(ZCzego As Byte, Skala As Integer) As Double
Przelicz = ZCzego * Skala / 100
End Function

ZCzego=100 '%
Skala=2055 'twp

I co dziwne wybija mi błąd "Overflow", mimo że 2055 spokojnie mieści się w zmiennej zadeklarowanej jako Double. A więc? W czym jest błąd?


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

28-08-2004 23:09
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

W tym, ze Skala jest zdeklarowana jako Integer.

Sposób rozwiązania:
1) Zmień typ Skala na większy (Long, Double, ...)
2) W kodzie zmień na:
ZCzego * CLng(Skala) / 100
3) W kodzie zmień na:
ZCzego * (Skala / 100)

Najsensowniejszym rozwiązaniem wydaje się 3.

Dodatkowo radzę dodać CDbl przy jednym z operandów - inaczej będziesz otrzymywał tylko wyniki całkowite.

Wyjaśnienie problemu:
Mamy zmienne:
ZCzego - Byte
Skala - Integer

Pierwszą wykonywaną operacją jest iloczyn ZCzego i Skala. Wynikiem tej operacji jest liczba typu Integer ([Byte] * [Integer] = [Integer]). Zatem jeśli mnożysz 2055 * 100, wychodzi ci 205500 co zdecydowanie przekracza możliwości Integera.

[Post edytowany dnia 29-08-2004 07:11 przez marcin_an]


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

29-08-2004 07:08
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Usercontrol
mr. Tom



Typ: neutral
Postów: 191
Zarejestrowany: Oct 2003

Ja zrobiłbym także system sprawdzający, czy program nie wziął sobie z kosmosu wartości dla zmiennej ZCzego większej niż 255.

29-08-2004 11:08
Pokaż profil Usercontrol  Wyślij email do Usercontrol   Odwiedź stronę Usercontrol       1518548
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003


Ja zrobiłbym także system sprawdzający, czy program nie wziął sobie z kosmosu wartości dla zmiennej ZCzego większej niż 255.

"[...]system sprawdzający[...]" - hehe... wystarczy if zczego>100 then msgbox..., albo też on error resume next


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

29-08-2004 11:45
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

1) Problem występuje w iloczynie ZCzego * Skala
2) Jak mógł wziąć z kosmosu, jeśli jest podawany jako parametr?
3) Nie przypisałby >255 do zmiennej Byte

[Post edytowany dnia 29-08-2004 11:47 przez marcin_an]


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

29-08-2004 11:46
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 4 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1