andrisp Posted March 22, 2006 Report Share Posted March 22, 2006 Pēc idejas kodam vajadzēja skaitli 17.599999606609 noapaļot uz 17.6, bet tā nenotiek. Visādi citi skaitļi strādā vienkārši lieliski, bet šis uzpeldēja tāds, kas negrib. Izmantoju bubu ieteikto metodi, lai salīdzinātu floatus. Godīgi sakot, īsti nesaprotu, kā tas notiek, jo nezinu, ko nozīmē 1e-6. <?php function is_floats_equal($f1, $f2) { return abs($f1-$f2) < 1e-6; } function custom_round($x, $p=2, $acr=1) { $y = 0; if(is_numeric($x)) { $y = round($x, $p); if (is_floats_equal($x, $y)) { return $x; } else { if ($acr == 1) { return '<acronym title="'.$x.'">~'.$y.'</acronym>'; } else { return $y; } } } else { return false; } } $x = 17.599999606609; echo custom_round($x); ?> Paldies jau iepriekš Link to comment Share on other sites More sharing options...
Delfins Posted March 22, 2006 Report Share Posted March 22, 2006 Un šitā? function custom_round($x, $p=2, $acr=1) { $y = 0; if(is_numeric($x)) { $y = round($x, $p); if ($acr == 1) { return '<acronym title="'.$x.'">~'.$y.'</acronym>'; } } return $y; } Link to comment Share on other sites More sharing options...
andrisp Posted March 22, 2006 Author Report Share Posted March 22, 2006 (edited) Nu pag, tu jau man tikai iedevi savādāk pārrakstītu fju. Man vajag obligāti pārbaudi vai pēc noapaļošanas skaitlis ir savādāks (respektīvi - vai ir noapaļots), un tad ja ir vienādi, neizdot kopā acr tagu. Un lai pareizi salīdzīnātu float skaitļus vajag to speciālo fju, ko man parādīja bubu. Ja salīdzina vienkārši ar ==, tad būs vēl vairāk gļuku. PAPILDINĀTS: Noskaidroju, ko īsti nozīmē 1e-6. Izmainīju uz 1e-12, un tagad iet. Edited March 22, 2006 by andrisp Link to comment Share on other sites More sharing options...
Recommended Posts