note 81465 added to function.round

From: Date: Fri, 29 Feb 2008 10:36:37 +0000
Subject: note 81465 added to function.round
Groups: php.notes 
Request: Send a blank email to php-notes+get-136587@lists.php.net to get a copy of this message
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; } } ---- Server IP: 213.92.11.19 Probable Submitter: 212.103.209.194 ---- Manual Page -- http://www.php.net/manual/en/function.round.php Edit -- https://master.php.net/note/edit/81465 Del: integrated -- https://master.php.net/note/delete/81465/integrated Del: useless -- https://master.php.net/note/delete/81465/useless Del: bad code -- https://master.php.net/note/delete/81465/bad+code Del: spam -- https://master.php.net/note/delete/81465/spam Del: non-english -- https://master.php.net/note/delete/81465/non-english Del: in docs -- https://master.php.net/note/delete/81465/in+docs Del: other reasons-- https://master.php.net/note/delete/81465 Reject -- https://master.php.net/note/reject/81465 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#136587) next »