darksign Posted March 7, 2009 Report Share Posted March 7, 2009 es te iisti nesapratu.. tas ir php bugs vai taa tam buus buut: $a = 123456789123456; $b = 123; $c = strlen($b); $d = strlen($a); echo $c."<br />"; echo $d."<br />"; $aa = substr($a, $c, $d); echo $aa."<br /><hr />"; $a = "123456789123456"; $b = 123; $c = strlen($b); $d = strlen($a); echo $c."<br />"; echo $d."<br />"; $aa = substr($a, $c, $d); echo $aa; un te izvads: 3 15 456789123000 -------------------------------------------------------------------------------- 3 15 456789123456 Lai arii substr ir jaapadod strings.. tachu liidz shim php to dariija vienkaarshi lieliski savu lietu ar type casting.. un visu vareeja baast par stringu iekshaa a tagad nee.. pat pieliekot substr((string)$a, $c, $d); nekaa neliidz vienalga pirmajaa variantaa paliek taas 000 galaa.. lai gan iisti nesapratu kapeec.... komentaari??? Quote Link to comment Share on other sites More sharing options...
Kavacky Posted March 7, 2009 Report Share Posted March 7, 2009 (edited) Padomā, kāds ir max int ( 32-bit unsigned ) izmērs, a pirmajā gadījumā $a tieši int piešķir, un par stringu konvertē to int, kas tur sanāca un iekļāvās 32 bitos. Edited March 7, 2009 by Kavacky Quote Link to comment Share on other sites More sharing options...
bubu Posted March 7, 2009 Report Share Posted March 7, 2009 $a = 123456789123456; $b = 123; $c = strlen($b); $d = strlen($a); Tu no skaitļa mēģini dabūt stringa garumu?? Tas tev nešķiet dīvaini? Bet kā jau tev saka - php (vismaz 32-bitu) kā veselu skaitli var saglabāt makismāli 2^31 - 1 lielu vērtību. Lielāki skaitļi pārvēršas par doubļiem, kuriem zudīs precizitāte. Quote Link to comment Share on other sites More sharing options...
darksign Posted March 7, 2009 Author Report Share Posted March 7, 2009 (edited) Tu no skaitļa mēģini dabūt stringa garumu?? Tas tev nešķiet dīvaini? ja tas buutu C tad es par to uztrauktos.. bet taa kaa tas ir php tad praktiski taa ir skriptu valoda.. un viss tur ir strings.. tikai vinjsh te izliekas dazreiz ka kaut ko paarveersh par skaitljiem :D nu bet shoreiz laikam tas skaitlja buutiiba te ir svariiga un laikam nostraadaa to ko teica Kavasaky bet vienalga.. nezinu kapeec piem php neizpilda to type castingu (string)$a vai ari shaadu lietu $a = $a.""; un te vinjam vajadzeetu konverteeties uz stringu.. bet redz nee.. shis paliek par to pashu intu.. stulbi. tur jau arii tas joks, ka php nav iisti inti.. tie ir interpreteeti no stringa.. tapeec arii visaadi gljuki Edited March 7, 2009 by darksign Quote Link to comment Share on other sites More sharing options...
bubu Posted March 7, 2009 Report Share Posted March 7, 2009 php mainīgajiem ir ļoti konkrēti tipi. Viss tev tur nav strings. http://php.net/is_int http://php.net/gettype Nevajag uz to paļauties, ka viss tev tur sakonvertēsies kā vajag. Tie nav nekādi gļuki, bet gan ļoti konkrēti definētas konvertācijas, uz kurām tu nepareizi paļaujies. Quote Link to comment Share on other sites More sharing options...
darksign Posted March 7, 2009 Author Report Share Posted March 7, 2009 laikam jau taa arii ir.. bet kaa tad vinju vajag to mainiigo (shajaa gadiijumaa int tipa) pareizi ieksh php konverteet uz stringu? Quote Link to comment Share on other sites More sharing options...
Kaklz Posted March 7, 2009 Report Share Posted March 7, 2009 varbūt vienkārši ieliec pēdiņās tos skaitļus? $a = "123456789123456"; $b = "123"; $c = strlen($b); $d = strlen($a); Problēma kā jau tev te vairākas reizes ir teikts, ka tavs 15 zīmes garais skaitlis neielien int robežās. tāpēc jau pirms konkatenācijas un typecasting tas vairs nav tas, ko tu iedomājies. Lai labāk saprastu, pamēģini kaut vai šādu joku uz 32bit kastes: <?php $a = 123456789123456; echo $a; uz mana 32bit servera rezultāts ir 1.23456789123E+14 no šejienes tu arī redzi, kur un kāpēc tev pieliekas galā nulles - skaitlis tiek pārveidots par double un pazaudēti pēdējie pāris precizitātes cipari - tavā gadījumā 456, kas aizvietojas ar 000. Quote Link to comment Share on other sites More sharing options...
darksign Posted March 8, 2009 Author Report Share Posted March 8, 2009 (edited) ok.. lieta skaidra.. bet joprojaam taa arii iisti nezinu kaa ieksh php to 16 vai vairaak ciparu skaitli pareizi un skaisti konverteet uz stringu... ir kaada iebuuveetaa funkcija php? vai pasham vien ir shitaas lietas jaacep augshaa? p.s. vismaz uz aatro skatoties php.net neatradu.. googlee ierakstot "php int to string" .. atrodas labi varianti kaa stringu paartaisiit uz int.. bet otraadi ir tikai strval($int) un tas pats type castings (string)$int bet arii sheit ja cipars lielaaks par 16 simboliem.. tad nekonverteejas taa kaa vajag... :/ viens jau daudz maz normaalaaks veids, kas kaut kaa darbojas buutu: $a = 123456789123456223; $v = number_format($a,0,'.',''); te piemeers: $a = 123456789123456223; $v = number_format($a,0,'.',''); var_dump($v); echo "<br />"; echo (string)$v; echo "<br />"; echo (string)$a."<br />"; un izvads: string(18) "123456789123456224" 123456789123456224 1.23456789123E+17 cik sapratu no php.net ka to number_format arii izmanto tajos type castingos.. bet nu nezinu kaa vinji tur iebuuveejushi.. tachu ar roku straadaa labaak.. hmm.. laikam vinji veel pa vidu tur kaut kur uz float vai bigint kāsto... !? ir veel kaads veids kaa tos lielos ciparus ar iebuuveetajaam funkcijaam uz stringiem taisiit? Edited March 8, 2009 by darksign Quote Link to comment Share on other sites More sharing options...
bubu Posted March 8, 2009 Report Share Posted March 8, 2009 Jautājums - kur to to lielo 16 ciparu skaitli esi dabūjis? Ja no POST/GET datiem vai no lasi faila/db, tad nekonvertē neko. Lieto to uzreiz kā stringu un nepazudīs nekādi cipari. Jeb tu to gribi iegūt ar matemātiskām darbībām? Tad tā vienkārši nekas nesanāks. Tad vajadzēs izmantot kādu garo skaitļu bibliotēku, piemēram, GMP vai BCMath. Quote Link to comment Share on other sites More sharing options...
darksign Posted March 8, 2009 Author Report Share Posted March 8, 2009 tnx.. bubu par linkiem ;) Quote Link to comment Share on other sites More sharing options...
bubu Posted March 8, 2009 Report Share Posted March 8, 2009 Read The Fine Manual :) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.