Jump to content
php.lv forumi

Problēmas ar float'u apaļošanu


andrisp

Recommended Posts

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

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

×
×
  • Create New...