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:[EMAIL PROTECTED] 
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 <[EMAIL PROTECTED]> 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

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to