🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
9 messages
9 total messages Started by .: Jam Łasica Wed, 29 Aug 2001 00:51
liczba czalkowita
#1536
Author: .: Jam Łasica
Date: Wed, 29 Aug 2001 00:51
11 lines
1199 bytes
jak zrobić warunek wykrywający liczbe całkowitą czyli....

if($zmi==liczbacałkowita){blabla;}
else{print ("to nie jest liczba całkowita");};

??


Łasic
http://www.flaschool.and.pl -szkólka niedzielna każdego FLAshowca
Re: liczba czalkowita
#1537
Author: Darek Sieradzki
Date: Wed, 29 Aug 2001 01:10
22 lines
1458 bytes
".: Jam Łasica" <m.b@inetia.pl> wrote in 
news:9mhe98$plk$1@news.internetia.pl:

> jak zrobić warunek wykrywający liczbe całkowitą czyli....
> 
> if($zmi==liczbacałkowita){blabla;}
> else{print ("to nie jest liczba całkowita");};

if (strval((int)$zmi)==$zmi) {
    	echo "$zmi jest calkowita";
} else {
    	echo "$zmi nie jest liczba calkowita";
}

DS

-- 
 .---------
(-- a dny jak padli andele prsty ryji hlinu --.                  .
 `              `-- a dni jak upadle anioly palcami ryja ziemie --)    
                                                        ---------'   
                  http://www.dago.pmp.com.pl
Re: liczba czalkowita
#1538
Author: gemini
Date: Wed, 29 Aug 2001 01:12
10 lines
1150 bytes
jak zrobić warunek wykrywający liczbe całkowitą czyli....

najprosciej bedzie tak:

if($liczba-round($liczba)==0)

--
                      ..::[GeMiNi]::..
::::[mail: gemini@geminizone.dhs.org]::::
            ..::[mail: gemini@viper.pl]::..
Re: liczba czalkowita
#1539
Author: Piotr Pawlow
Date: Wed, 29 Aug 2001 02:39
32 lines
2253 bytes
"gemini" <gemini@viper.pl> wrote:
> > jak zrobić warunek wykrywający liczbe całkowitą czyli....
> najprosciej bedzie tak:
> if($liczba-round($liczba)==0)

Rewelacja. W takim razie spójrz na ten przykład:

$liczba=4.1-0.1;
echo "Liczba $liczba jest ";
if($liczba-round($liczba)==0) echo "całkowita"; else echo "ułamkowa";

I co? - liczba 4 okazuje się nie być całkowitą :-)
Radzę najpierw poczytać manuala, a szczególnie zwrócić uwagę na zdanie
"never compare floating point numbers for equality".

Proponuję takie rozwiązanie:
if(abs($liczba-round($liczba))<1e-15) echo "całkowita"; else echo
"ułamkowa";

Użyta w wyrażeniu stała (1e-15) jest zależna zarówno od wymaganej
dokładności testu jak i od wewnętrznej reprezentacji liczb
zmiennoprzecinkowych podwójnej precyzji w systemie. Minimalną
teoretycznie dopuszczalną wartość można uzyskać biorąc wartość
definicji DBL_EPSILON z pliku nagłówkowego "limits.h". W praktyce
odczytaną wartość należy zwiększyć o jeden/dwa lub więcej rzędów
wielkości, zależnie od ilości działań wcześniej wykonywanych na
zmiennej $liczba (a to z powodu kumulowania się błędów obliczeń).

--
Pozdrawiam,
 Piotr Pawłow
 mailto:pp@siedziba.pl, homepage: http://pp.siedziba.pl
Re: liczba czalkowita
#1540
Author: Paweł Sikorski
Date: Wed, 29 Aug 2001 06:19
12 lines
1288 bytes
> Radzę najpierw poczytać manuala, a szczególnie zwrócić uwagę na zdanie
> "never compare floating point numbers for equality".
Może się mylę, ale w manualu jest też "is_int -- Find whether a variable is
an integer"
czyli
if (is_int($liczba)) echo "jest";
else echo "nie jest";

O to chodzilo???
______________________
Paweł Sikorski
http://www.wlodkowic.lm.pl
Re: liczba czalkowita
#1541
Author: leming nine
Date: Wed, 29 Aug 2001 07:29
38 lines
1897 bytes
// klasa sprawdzająca poprawność string'ów
class Validator {
    // czy string jest liczbą całkowitą?
    function isInt($str) {
        $exp = "/^(\-)?\d+$/";
        return preg_match($exp, strval($str));
    }
    // czy string jest w ogóle jakąś liczbą?
    function isNumeric($str) {
        $exp = "/^(\-)?\d+([.,]\d+)*$/";
        return preg_match($exp, strval($str));
    }
}
// klasa opakowująca
class Number {
    // zwraca null, jeśli nie jest to w ogóle liczba
    function parseFloat($str) {
        if (Validator::isNumeric($str)) {
            return doubleval($str);
        } else {
            return null;
        }
    }
    // zwraca liczbę całkowitą, inaczej - null.
    function parseInt($str) {
        if (Validator::isInt($str)) {
            return intval($str);
        } else {
            return null;
        }
    }
}
Validator::isNumeric($nr) || die("To nie jest numer!");
Validator::isInt($nr) || die("To nie jest liczba całkowita!");
// twój kod...

// --
// l9
Re: liczba czalkowita
#1543
Author: Piotr Pawlow
Date: Wed, 29 Aug 2001 13:03
15 lines
1421 bytes
"Paweł Sikorski" <psikor@konin.lm.pl> wrote:
> Może się mylę, ale w manualu jest też "is_int -- Find whether a
> variable is an integer"
> czyli
> if (is_int($liczba)) echo "jest";
> else echo "nie jest";
> O to chodzilo???

Raczej nie. is_int sprawdza TYP liczby a nie liczbę, czyli
is_int(1.0)=false. A przecież 1.0 jest liczbą całkowitą.

--
Pozdrawiam,
 Piotr Pawłow
 mailto:pp@siedziba.pl, homepage: http://pp.siedziba.pl
Re: liczba czalkowita
#1544
Author: Jarek Durak
Date: Wed, 29 Aug 2001 14:04
19 lines
1167 bytes

".: Jam Łasica" wrote:
> 
> jak zrobić warunek wykrywający liczbe całkowitą czyli....
> 
> if($zmi==liczbacałkowita){blabla;}
> else{print ("to nie jest liczba całkowita");};

<?php
$a = 10;
print(gettype($a));
?>

>php -f a.php
integer
>Exit code: 0

J
Re: liczba czalkowita
#1542
Author: Piotr Pawlow
Date: Wed, 29 Aug 2001 18:06
14 lines
1450 bytes
"leming nine" <l9spam@yt.ng.pl> wrote:
> // klasa sprawdzająca poprawność string'ów
> (...)

Fajna klasa, ale:
- nie obsługuje notacji naukowej
- rzutowanie liczby na stringa używa ustawień locale do konwersji, i z
niektórymi localami Twoje testy mogą nie działać prawidłowo.
Wiem że się czepiam ale szczegóły są czasem ważne.

--
Pozdrawiam,
 Piotr Pawłow
 mailto:pp@siedziba.pl, homepage: http://pp.siedziba.pl
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads