Pēdējās 5 ziņas iz TV*Neta RSS veidā. Tiek atjaunots reizi piecās minūtēs.
TV*Net RSS
09:31 @ 2004-03-05 = 17 blabla
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' :)
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.