2.4. Rounding Floating-Point Numbers2.4.1. ProblemYou want to round a floating-point number, either to an integer value or to a set number of decimal places. 2.4.2. SolutionTo round a number to the closest integer, use round( ) : $number = round(2.4); // $number = 2 To round up, use ceil( ): $number = ceil(2.4); // $number = 3 To round down, use floor( ): $number = floor(2.4); // $number = 2 2.4.3. DiscussionIf a number falls exactly between two integers, its behavior is undefined: $number = round(2.5); // $number is 2 or 3! Be careful! As we mention in Recipe 2.3, floating-point numbers don't always work out to exact values because of how they're stored internally by the computer. This can create situations in which the obvious answer isn't. A value you expect to have a decimal part of "0.5" might instead be ".499999...9" (with a whole bunch of 9s) or ".500000...1" (with many 0s and a trailing 1). If you want to ensure that a number is rounded up as you might expect, add a small delta value to it before rounding: $delta = 0.0000001; $number = round(2.5 + $delta); // $number = 3 To keep a set number of digits after the decimal point, round( ) accepts an optional precision argument. For example, if you are calculating the total price for the items in a user's shopping cart: $cart = 54.23; $tax = $cart * .05; $total = $cart + $tax; // $total = 56.9415 $final = round($total, 2); // $final = 56.94 2.4.4. See AlsoRecipe 2.3 for information on comparing floating-point numbers; documentation on round( ) at http://www.php.net/round. Copyright © 2003 O'Reilly & Associates. All rights reserved. |
|