|
abs
Absolute value
(PHP 4, PHP 5)
Example 1137. abs() example<?php Related Examples ( Source code ) » abs Examples ( Source code ) » realpath Examples ( Source code ) » Calling the Built in abs() Function Examples ( Source code ) » Trimming Strings Examples ( Source code ) » Trimming Strings Examples ( Source code ) » Trimming Strings Examples ( Source code ) » Trimming Strings for 'tab' and 'return' Examples ( Source code ) » Aligning Text Within a Fixed Space Using imageTTFbbox() Examples ( Source code ) » A Dynamic Bar Chart Examples ( Source code ) » abstract class demo Examples ( Source code ) » Define abstract class Examples ( Source code ) » Define class level constant value to control the class behaviour Examples ( Source code ) » Class inheritance in action Examples ( Source code ) » Class information is Abstract, is Final and is Instantiable Examples ( Source code ) » Class method info is User Defined, is Internal, is Abstract Examples ( Source code ) » PHP Design Patterns Composite Code Examples / Notes » absabodeman
There's another problem in the below code. The correct function to see whether a value is an integer is is_int(), not int(), so the code should look like this: <?php if(!is_numeric($range))//checks for numeric input { $range=1; }//sets $range to integer 1 if input is anything other than a numeric value if(!is_int($range))//checks to make sure it is an integer (not decimal) { $range=int_val($range); }//if a decimal- sets $range to integer value $range=abs($range);//sets value to positive whole number ?> concordia
Sometimes you may want to do the opposite of abs(): turn a positive number into a negative. <?php function turn_neg ($num) { return $num - $num * 2; } ?> But this can create errors when you put a negative number inside... turn_neg (-2) returns 6. <?php turn_neg (-2); // 6. ?> The solution is to make another function to determine if the number is negative or not. <?php function is_neg ($num) { return $num < 0; } function turn_neg ($num) { if (is_neg ($num)) { return $num - $num * 2; } else { return abs ($num); } } turn_neg (2); // -2 turn_neg (-2); // 2 ?> Or, if the number is not negative, you could also return false. josh
Let's say you are resizing images to a standard size that can be expressed as a ratio (width/height). The problem I came into was that I wanted to be reasonable with the proportion of the images that my customer is uploading (couldn't we all use a little less horizontal on pictures?), but I wanted to reject the horizontal pictures when they were uploading vertical ones. So I wanted to accept proportions of images that were within a reasonable threshold (+ or -) of what I will be resizing them to. Assuming a standard of 1 to 4 (0.25) and a threshold of no more than 0.05 deviation, then the number 0.30 and 0.20 would return true and 0.19 would return false. <?php function threshold($given,$thresh,$standard) { return (abs($given-$standard)<=$thresh) ? true : false; } ?> mbender
In reference to the previous code sample the int_val function is actually intval() [http://us4.php.net/manual/en/function.intval.php]: <?php if(!is_numeric($range))//checks for numeric input { $range=1; } //sets $range to integer 1 if input is anything other than a numeric value if(!int($range))//checks to make sure it is an integer (not decimal) { $range=intval($range) // not -> int_val($range); }//if a decimal- sets $range to integer value $range=abs($range);//sets value to positive whole number ?> jeremys
I'm unable to replicate concordia's problem with the $n = $n - $n * 2 code. I agree with the simplification to $n *= -1. But there's no reason that concordia's code should return 6 for the value -2, and it doesn't appear to. When I tried it, PHP returned 2, as it should. If PHP were somehow flipping the sign of integers randomly, that would be a *major* bug! There doesn't seem to be a sgn() function yet. Here's some quick code to do it: function sgn($x) { return $x ? ($x>0 ? 1 : -1) : 0; } You could use $x ? abs($x)/$x : 0 too, but might as well avoid the float division. lazarus
Even that is unnecessarily complex. Try this: <?php function n_abs($v) { return -abs($v) ; } ?> Faster too. rdk
concordia, you seem to be overcomplicating matters. If you want to do the reverse of the abs function, the only code required is: <?php function n_abs($num) { return ($num > 0) ? $num * -1 : $num; } n_abs(2); //-2 n_abs(-2); //-2 ?> If you want to switch the sign bit of a number, as your example seems to indicate... turn_neg (2); // -2 turn_neg (-2); // 2 ...you just need to do $num *= -1; Your function also doesn't seem to work. Switching "if (is_neg ($num))" to "if (!is_neg ($num))" would make it function as indicated by your comments (i.e. toggle the sign bit), but it would still be overly complicated. alreece45
Both of the below codes were wrong. <?php // Check to see if $range is numberic, if not, set it to the integer value 1 if(!is_numeric($range)) { $range=1; } // Check to see if $range is an integer and not a float. Use is_int() and not int(). if(!is_int($range)) { // Make it an integer. Use intval() here, not int_val. $range=intval($range); } $range=abs($range); ?> The only thing I don't get is why we have to check before doing the functions. Whether or not we do the functions it will give us what we want. The only check I really understand being there is the one that sets it to one. Why not just do: <?php // If $range is numberic, make it in positive integer, otherwise, make it one. $range = is_numeric($range) ? abs(intval($range)) : 1; ?> Seems like a lot less code. Or If you prefer to stay with if statements: <?php if(is_numberic($range)) { // If $range is numberic, make it in positive integer. $range = abs(intval($range)); } else { //otherwise, make it one. $range = 1; } ?> Both ways seem smaller to me. bgustin
assume we take user input from a form untreated and assign it to variable $range. We want to be sure this number is a Positive Whole number, since abs() just sets a number to positive or 0, and we dont want decimals... <?php if(!is_numeric($range))//checks for numeric input { $range=1; }//sets $range to integer 1 if input is anything other than a numeric value if(!int($range))//checks to make sure it is an integer (not decimal) { $range=int_val($range); }//if a decimal- sets $range to integer value $range=abs($range);//sets value to positive whole number ?> for example the input "testing" would return $range =1, the input "3.578" would return value=3 If the input is null, I am havent tested to see if it gets set to 1 courtesy of int_val or not, but I believe it will be. I'm sure there's probably a more elegant way to do this using regex, however for an apprentice php coder, this might be a little easier to understand and use. |