Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czy ta liczba jest całkowita?
sheerun
post 26.11.2007, 18:22:41
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 20.05.2007

Ostrzeżenie: (0%)
-----


Mam taki skrypt:
  1. <?php
  2. $y=12*(8/6);
  3. echo "Y = " . $y . "<br />";
  4. if(is_int($y)) echo "Jest całkowita<br />"; 
  5.  else echo "Nie jest całkowita\n";
  6. ?>


Ten skrypt wyświetli coś takiego:
Y = 16
Nie jest całkowita

Mimo, że 16 jest całkowita. To równanie psuje oczywiście 8/6.
Zależy mi na sprawdzeniu (w miarę szybki sposób myślę) że y jest całkowitą liczbą.
Dodam, że y może być czasami równe nawet np. 1.00001.
Jednak przyjmę każdy dobry sposób happy.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
szczypior
post 26.11.2007, 19:15:31
Post #2





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 5.02.2007

Ostrzeżenie: (0%)
-----


is_int() sprawdza czy zmienna została przesłana jako INTEGER a nie czy jej wartość jest całkowita


--------------------
Pytania i odpowiedzi na każdy temat - ZapytajSie.pl
Darmowe aliasy i liczniki odwiedzin - RFV.pl
Go to the top of the page
+Quote Post
sheerun
post 26.11.2007, 19:30:03
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 20.05.2007

Ostrzeżenie: (0%)
-----


Pouczające, ale jak sprawdzić czy jej wartość to liczba całkowita
Go to the top of the page
+Quote Post
Prym
post 26.11.2007, 19:38:59
Post #4





Grupa: Zarejestrowani
Postów: 100
Pomógł: 11
Dołączył: 20.05.2007
Skąd: z fotela :)

Ostrzeżenie: (0%)
-----


jesli sie nie myle to intval() zwraca liczbe całkowitą

wiec na dobra sprawe można sprawdzic czy nie ma zadnych ulamkow w lopatologiczny sposob smile.gif :

$x=$y-intval($y); // dostajemy 0,........ to co w ulamku

a potem tylko zifowac czy ulamek($x) jest > 0

Ten post edytował Prym 26.11.2007, 19:43:43
Go to the top of the page
+Quote Post
domis86
post 26.11.2007, 20:41:28
Post #5





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Cytat(Prym @ 26.11.2007, 19:38:59 ) *
jesli sie nie myle to intval() zwraca liczbe całkowitą

wiec na dobra sprawe można sprawdzic czy nie ma zadnych ulamkow w lopatologiczny sposob smile.gif :

$x=$y-intval($y); // dostajemy 0,........ to co w ulamku

a potem tylko zifowac czy ulamek($x) jest > 0


AGP

bo nieraz jak robi sie jakies dzielenie to chociaz wynik powinien byc calkowity to wyjdzie float z jakims kawalkiem. Wynika to z niedokladnosci floata.

np: 2/4 = 2.0000000000000000001 (czesto tak jest, moze akurat nie na tych liczbach tu podanych)


rozwiazaniem moze byc zaokroglenie do np 5 miejsca po przecinku :
$x=$y-intval( round($y,5) );
Go to the top of the page
+Quote Post
sheerun
post 26.11.2007, 21:02:19
Post #6





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 20.05.2007

Ostrzeżenie: (0%)
-----


Dzięki za chęci, ale wasze sposoby niestety nie działają

Załatwiłem to tak:

function myIsInt ($x){return !(preg_match('/\./', (string)$x));}

Pozdrawiam
Go to the top of the page
+Quote Post
domis86
post 27.11.2007, 00:54:45
Post #7





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


jak nie dzialaja jak dzialaja
widze, ze lubisz chodzic na okolo - regexpy - powodzenia

Ten post edytował domis86 27.11.2007, 00:54:59
Go to the top of the page
+Quote Post
nevt
post 27.11.2007, 08:26:41
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


sh33run koledzy mają rację - twoje rozwiązanie jest takie sobie:
  1. <?php
  2. if(myIsInt('') and myIsInt('kupa') and myIsInt('3,5') and myIsInt('2e-1'))
  3. echo 'SAME LICZBY CAŁKOWITE?';
  4. if(!(myIsInt('1.0') or myIsInt('2.0') or myIsInt('3.0') or myIsInt('2.2e2)))
  5.  echo 'ANI JEDNEJ LICZBY CAŁKOWITEJ?;
  6. ?>

prawidłowa funkcja, odporna na wszystkie typy wejsciowe powinna wyglądać mn. więcej tak:
  1. <?php
  2. function is_real_int($x)
  3. {
  4. return (is_numeric($x) and (intval($x) == floatval($x)));
  5. }
  6. ?>

powodzenia

Ten post edytował nevt 27.11.2007, 08:32:38


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
domis86
post 27.11.2007, 08:54:02
Post #9





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


nevt: obadaj se liczbe 4200000000 na twojej funkcji aaevil.gif
Go to the top of the page
+Quote Post
nevt
post 27.11.2007, 09:07:55
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


oczywiscie że FALSE: 4200000000 nie jest liczbą całkowitą w PHP bo przekracza zakres typu int - zatem twoje rozwiązanie jest idealne dlatego że działa dla tej wartości? nie podoba ci się kiedy ludzie dobrze doradzają - to daj sobie spokój z tym forum. nikt tu nic do ciebie nie ma, a wskazanie słabych stron twojego rozwiązania nie jest atakiem na twoją osobę.


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
domis86
post 27.11.2007, 09:13:20
Post #11





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Ale kolega sie pytal chyba o to
"jak sprawdzic czy liczba jest calkowita"
a nie
"jak sprawdzic czy liczba to int"
Go to the top of the page
+Quote Post
nevt
post 27.11.2007, 11:39:53
Post #12





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


zgadza się - moja funkcja działa poprawnie tylko dla liczb w zakresie typu int - ale nie zmienia to faktu że rozwiązanie kolegi nie dziala w znacznie wiekszym zakresie przekazywanych warości. nawet jeśli spełnia jego oczekiwania w jakimś konkretnym zastosowaniu, to powinna się nazywać nie myIsInt() ale myNotDot().
Cytat
Zależy mi na sprawdzeniu (w miarę szybki sposób myślę) że y jest całkowitą liczbą.
Dodam, że y może być czasami równe nawet np. 1.00001.
Jednak przyjmę każdy dobry sposób
liczby pokazane w pytaniu kolegi nie sa na granicy zakresu int - a kolega twierdzi, że chętnie przyjmie każde dobre rozwiązanie - uważam, że moja funkcja spełnia jego kryteria i potrzeby, jest prosta i czytelna - przeciez forum ma rowniez charakter edukacyjny...

Ten post edytował nevt 27.11.2007, 11:44:26


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
domis86
post 27.11.2007, 11:45:56
Post #13





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


no to ja powiem tak smile.gif

  1. <?php
  2. function czyJestCalkowita($x)
  3. {
  4. return (is_numeric($x) and (floatval($x) == floor(floatval($x))));
  5. }
  6. ?>


Ten post edytował domis86 27.11.2007, 11:46:47
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:38