note 81465 deleted from function.round by danbrown

From: Date: Sun, 17 May 2009 16:15:19 +0000
Subject: note 81465 deleted from function.round by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-154777@lists.php.net to get a copy of this message
Note Submitter: domenicospina at hotmail dot com ---- Hi, approximations with Function Round() are WRONG!! If you tray to round 2.135 to second digit, expexted value is "2.14", but returned value is "2.13" : WRONG!!! I'm developing a managerial program(php-based) and i must solve this bug (currently in php5.2.5) with my function: function toFixed($number,$approx=0,$visualizza='E',$format='default') { $number = sprintf("%s",sprintf("%f",$number)); $parts = explode(".",$number); $integers = $parts[0]; $decimals = $parts[1]; if (strpos($integers,"-")!==false){ $integers = str_replace("-","",$integers); $negative = true; } if($approx<1) { if ($decimals{0}>=5) { $integers++; } return $integers; } else{ $float = explode(".",($decimals/pow(10,strlen($decimals)))*pow(10,$approx)); $my_decimals = $float[0]; if($decimals{$approx}>=5) { $my_decimals++; } $total_decimals = ($my_decimals/pow(10,$approx)); } $my_number = sprintf("%s",sprintf("%f",($integers+$total_decimals))); $my_number = (strpos($my_number,".")===false)?($my_number."."):$my_number; $padding = (strpos($my_number,".")+1)+$approx; $my_number = str_pad($my_number,$padding,"0"); $my_number = substr($my_number,0,strpos($my_number,".")+$approx+1); $my_number = $negative?("-".$my_number):$my_number; switch($visualizza) { case 'E': //editing return $my_number; break; case 'V': //video return formatNumber($my_number,$approx,$format); break; } }

« previous php.notes (#154777) next »