Jump to content
php.lv forumi

php bugs vai normaala lieta?


darksign

Recommended Posts

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???

Link to comment
Share on other sites

$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.

Link to comment
Share on other sites

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 by darksign
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by darksign
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...