Atpakaļ uz pirmo lapu

laacz » 2004 » 5. Marts

TV*Net RSS

09:31 @ 2004-03-05 = 17 blabla  

Pēdējās 5 ziņas iz TV*Neta RSS veidā. Tiek atjaunots reizi piecās minūtēs.

Skaitļi un PHP

08:23 @ 2004-03-05 = 11 blabla  

Kā zināms, PHP nav strikti noteiktu mainīgo tipu. Piem., string <=> skaitlis konversijas notiek vienā vīlē. Taču, ir daži caveats, par kuriem vēlētos jums pastāstīt :) Konkrēti iet runa par to, kā pārvēršas strings par skaitli un ko darīt, lai tas notiktu puslīdz universāli.

Sāksim ar to, ka nodefinēsim — skaitlis var būt gan vesels, gan ar komatu un stuff.

Uzreizi rodas nepieciešamība apstrādāt ne tikai decimālo punktu (.), bet arī decimālo komatu (,). Tā kā PHP pēc noklusēšanas par decimālo atdalītāju uzskata tieši punktu, nevis komatu, tad nepieciešama viena īsa rindiņa:

$skaitlis = str_replace(',', '.', $skaitlis);

Tālāk. Liela daļa cilvēku pārbauda, vai ievadītais ir skaitlis, ar funkcijas is_numeric() palīdzību. Viss jau būtu labi, bet lietotājiem nereti ir tendence ievadīt ne tikai skaitli, bet arī dažas labas tukšuma zīmes pirms un pēc tā. Un ja ir šīs tukšuma zīmes, lielākoties, paziņojot, ka skaitlis ievadīts nepareizi, lietotājs apmulsīs, jo kļūdu neredzēs.

Ja cilvēks ievada ' 0.12' (pirms skaitļa ir atstarpe), tad viss ir ok. is_numeric() atgriež true.

Taču, ja atstarpe parādās pēc skaitļa, šī pati funkcija atgriež false. Šinī gadījumā mēs saucam talkā trim() un mūsu kods izskatās jau šādi:

$skaitlis = str_replace(',', '.', $skaitlis);
$skaitlis = trim($skaitlis);

Protams, ja nav nepieciešams apstrādāt lietotāja kļūdas, tad var izmantot type casting, pārveidojot skaitli par sev nepieciešama datu tipa pārstāvi kādā no sekojošajiem veidiem:

$skaitlis = (int)$skaitlis;  ja nepieciešams integer
$skaitlis = (double)$skaitlis;  ja nepieciešams double

Starp citu, es neizmantoju funkciju intval(), jo, ja veicu type castu, tad es vēlos, lai tādās vietās es to ieraudzītu uzreizi, nevis meklētu, kur tad ir funkcija…

Vēl viens moments. Iespējams, ka nesaistīts. Kā jums liekas, ko atgriezīs sekojošais piemērs?

$a = (0.1 + 0.7) * 10;
echo intval($a); // Būtu jābūt 8, vai ne?

Ja nepieciešams pārveidot reālus skaitļus par veseliem, ieteicams ir izmantot round() funkciju, jo vienkāršs (int) vai intval() nepalīdzēs. Peldošais punkts un precizitātes problēmas, va zi' :)

 

Valid CSS! Valid XHTML 1.0 Transitional! Valid RSS! Valid Atom!
Tātad tā. Kopīraita notice. Viss materiāls, kas atrodams šajā saitā nedrīkst tikt izplatīts, kopēts, jebkādi citādi reproducēts vai izmantots bez manas (laacz) rakstiskas atļaujas. šīs tiesības man laipni piedāvā Autortiesību Likums.
Jebkura informācija, kuru kāds labprātīgi publicē šajā saitā (piemēram, komentāri), pieder tās autoram. Taču, ievietojot infromāciju šajā saitā, tās autors sniedz saita īpašniekam tiesības to daļēji vai pilnā apjomā lietot, izplatīt, reproducēt, modificēt, adaptēt, publicēt, tulkot, publiski demonstrēt. Saita īpašnieks ir tiesīgs jebkuru komentāru jebkurā brīdī dzēst, vai modificēt.
© 1996 — 2025 laacz. Visas tiesības… nu jūs jau zināt, kur.
Spēcināts ar SPP (S Pivom Potjaņet) v2.0b (code name Marasmus)
Hostingu laipni piedāvā DEAC.

laacz blog activity

Top.LV

 

Lapa izlīdusi no servera dzīlēm 0.02807 sekundē(s)