RE: [PHP] Round
| From: | PHP-Gen | Date: | Wed, 29 Aug 2007 18:16:41 +0000 |
| Subject: | RE: [PHP] Round | ||
| References: | 1 2 3 4 5 6 7 8 9 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-261476@lists.php.net to get a copy of this message | ||
I believe there is some confusion on what ABS actually does. Ignoring all
the rounding that you are trying to do ABS is a very simple function.
ABS definition: Returns the absolute value of number.
What that means is.
Abs(1) = 1
Abs(2) = 2
Abs(3) = 3
Abs(0) = 0
Abs(-1) = 1
Abs(-2) = 2
Abs(-3) = 3
Simply put, returns the positive value of the number given. Thus if you put
it on a negative number it will always return positive.
This most likely doesn't help what your trying to do, but I wanted to
clarify this as you keep stating you are expecting a -1 when you use the ABS
function. Unless someone has some trick that I don't know about, ABS will
NEVER return a negative number.
-----Original Message-----
From: Jim Lucas [mailto:lists@cmsws.com]
Sent: Wednesday, August 29, 2007 1:43 PM
To: Daniel Brown
Cc: Zoltán Németh; php-general@lists.php.net
Subject: Re: [PHP] Round
Daniel Brown wrote:
> On 8/29/07, Zoltán Németh <znemeth@alterationx.hu> wrote:
>>> Think this through before you respond...
>>>
>>> Try this
>>>
>>> <?php
>>> var_dump( round(-0.26) );
>>> var_dump( abs( round(-0.26) ) );
>>> var_dump( round(-1.26) );
>>> var_dump( abs( round(-1.26) ) );
>>> ?>
>>>
>>> does this give you the desired results?
>>>
>>> What if I expected -1 for the last answer?
>
> It didn't take much thinking this time.... if you were expecting
> -1 for the last answer, you'd be wrong. ;-P
>
> The very nature of abs() is to return an absolute number, which is
> never a negative.
>
Exactly my point, abs() is not the answer
if he had any negative number that did not round to zero, say it would round
to -2, then having the
abs() in the calculations would return 2 instead of -2, which would be
wrong.
From what I read from the OP, I don't think this is what he was looking
for.
the op was asking why he got -0 instead of 0. not for a solution to fix it.
ok, better example.
<plaintext><?php
$list[] = 1; # I expect to get 1 and I get 1
$list[] = -1; # I expect to get -1 but I get 1
$list[] = -1.2; # I expect to get -1 but I get 1
$list[] = -0.23; # I expect to get 0 and I get 0
$list[] = -0.75; # I expect to get -1 and I get 1
foreach ($list AS $value) {
var_dump( abs( round($value) ) );
}
?>
But, from what the OP says, he would get -0 instead of 0 for the 4th entry.
Am I correct with this?
if so, you could try casting it as an int like so
var_dump( (int)round(-0.26) );
That might fix the problem
--
Jim Lucas
"Some men are born to greatness, some achieve greatness,
and some have greatness thrust upon them."
Twelfth Night, Act II, Scene V
by William Shakespeare
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php