Parašė ozzWANTED
2010 sausio 20 10:23:07
Trumpas kodas:
<?php
$i=1; $bal = 7.8;
$moketi = 1.5;
$m2 = 1.5*5.2;
print("<br /><i>".$i++.".</i> "); echo $m2." VS ".round($m2,2);
print("<br /><i>".$i++.".</i> "); echo ($moketi*5.2 > $bal) ? "true" : "false";
print("<br /><i>".$i++.".</i> "); echo ($m2 > $bal) ? "true" : "false";
print("<br /><i>".$i++.".</i> "); echo ((int)$m2 > (int)$bal) ? "true" : "false";
$m2= round($m2,2);
print("<br /><i>".$i++.".</i> "); echo ($m2 > $bal) ? "true" : "false";
?>
Kaip manote kokius atsakymus(TRUE ar FALSE) gražins sistema 4 kartus lygindama skaičius: 7.8 > 7.8 ?
Jeigu manote kad visus kartus atsakymas bus"false", JŪS KLYSTATE:
Štai ką gražina output'as:
1. 7.8 VS 7.8
2. true
3. true
4. false
5. false
Atkreipkime dėmesį, kad netgi perCAST'inimas į slankaus kablelio skaičius(real'ieji skaičiai).
Dar vienas pavyzdys:
floor((0.1+0.7)*10);
Kaip atsakymą gražins skaičių 7 !
Nors matematiškai turėtų būti 8.
Kadangi realieji slankaus kablelio skaičiai yra kompiuterijoje traktuojami kaip eilutės skleidinys. Pvz. tokiu būdu kompiuteris gali gražinti skaičiaus pi apytikslę reikšmę - ji skleidžią skaičių Teiloro eilute iki tam tikro tikslumo(t.y. VISADA egzistuoja paklaida).
Taigi, naudojanti slankaus kablelio skaičius BŪTINA žinoti, kad VISADA egzistuoja paklaida, ir PASKUTINIU skaičiumi pasitikėti nereikėtų.
Prie to paties, kas galbūt nežino kas yra CAST'inimas, Slankaus kabelio skaičiai(angl. floating-point numbers), šiek tiek informacijos:
Pagal nutylėjimą "String'ai" matematiniuose veiksmuose yra traktuojami kaip:
a) (integer) tipo skaičiai, jeigu string eilutėje nėra '.', 'e' arba 'E' simbolių;
b) (float) skaičiai, prišingu atveju.
Visi galimi kintamųjų/skaičių perdengimai(CAST'ing) PHP kalboje:
(int), (integer) - cast to integer
(bool), (boolean) - cast to boolean
(float), (double), (real) - cast to float
(string) - cast to string
(binary) - cast to binary string (PHP 5.2.1 PHP 6)
(array) - cast to array
(object) - cast to object
(unset) - cast to NULL (PHP 5)
MySQL duomenų tipų castinimas:
Prie to paties pridėsiu - jeigu norite CAST'inti duomenų tipus MySQL užklausose(nors apskritai CAST'inimas panašus SQL2 standartų kaip ir daugelyje kitų DBVS - MSSQL, Oracle, IBM DB2, Postgre SQL), tai jis vykdomas taip:
Užklausoje galima būtų daryti taip:
mysql > SELECT 91.2 AS tiksli_apimtis,
CAST(91.2 AS UNSIGNED INTEGER) AS apytiksle_apimtis,
'K.I.S.S.' AS pilna_biografija,
CAST('K.I.S.S.' AS BINARY) AS dvejetaine_biografija,
CAST('K.I.S.S.' AS CHAR(2)) AS apytiksle_apimtis;
Užklausos rezultatas būtų:tiksli_apimtis apytiksle_apimtis pilna_biografija dvejetaine_biografija apytiksle_apimtis
----------------------------------------------------------------------------------------------------------------
91.2 91 K.I.S.S. K.I.S.S. K.
Visi galimi MYSQL CAST'inimo būdai(MySQL 5.0+):
BINARY[(N)] - į dvejetainį formatą(pre-direktyva skirta kompiliatoriui)
CHAR[(N)] - į simbolių formatą.
DATE - į datos formatą (YYYY-MM-DD)
DATETIME - į ilgąjį datos formatą (YYYY-MM-DD HH:II:SS)
DECIMAL[(M[,D])] - į dešimtainį formatą
SIGNED [INTEGER] - į skaičių aibę (-INF ---> +INF)
TIME - į laiko formatą(HH:II:SS / HHH:II:SS (ilgasis laikas))
UNSIGNED [INTEGER] - į teigiamų skaičių aibę ( >= 0)
Pastaba: [] - žymi kad parametras neprivalomas. [] simbolių rašyti NEREIKIA
Taip pat keletas nuorodų, norintiems pasiskaityti plačiau:
Duomenų tipų perliejimas(CASTing) MySQL:
http://dev.mysql.com/doc/refman/...tions.html
Duomenų tipų perliejimas(CASTing) PHP:
http://lt.php.net/manual/en/lang...ggling.php
Slankaus kablelio skaičiai:
http://php.net/manual/en/languag....float.php
PhpFusion-Lt.com © 2010 ozzWANTED
2 Komentarai ·
527 Skaityta ·
|