![]() |
PHP function round();
I've been dinking with this since yesterday, dinked with it in the past and still not solid solution.
Scenario: I have a list that grows and gets smaller on the fly. There may be 8 things in the list, or 108 things in the list. For page design purposes I decided I want this list in a table with the number of cells in the table increasing and decreaseing with the size of the list to a maximum number of cells. As the list grows, the number of items in each cell will increase so that an equal number of items is in the first 6 cells, with overflow(if there is an overflow) of items going in the last cell. I couldnt get the round(); function to work properly for me because I always want the number to round to the next highest whole number regardless of the size of the decimal. Example: 5.00000000001 would round up to 6. Now I am forced to make this work because my work around that has been working for months, suddenly choked and the script dies. Quote:
Quote:
Any suggestions on how to make round(); work for me? - |
$rounded_count = (int) ($count + 0.5);
unless you need bankers rounding. Most people don't. |
Perfect! :)
- |
Use ceil() function.
Quote:
|
sorry, Sams is right, you wanted ceil, not round.
ceil(5.000001) = 6 floor(5.000001) = 5 round(5.000001) = 5 round(5.600001) = 6 |
Wow! Very different results using the two different ways of handling the round up.
In my first post I showed two snippets of code. The second snippet is what produces the table cells that will be sent to the browser. I didnt alter that part of the code. Here are the results of what happened: Quote:
Quote:
Sams and cd34, thanks for your help! |thumb - |
generally I use modulo or % to do this. basically, set your $loop = 0; if ($loop % 7) { print " | " } $loop modulo 7 = 0 when there is no remainder, i.e., the column is divisible by 7 (or if the loop is 0) You need to do some special case handling for 0, and some end of loop processing if there aren't a multiple of 7 columns in your result set. The reason for your extra column is probably that you started loop at 1, and are dividing by 7, which gives you a first blank column -- then things should realign themselves unless there is something else I'm not seeing. From what you posted, you should get 6 columns in the first row, 7 in each successive row. Another way is to use an indexed array and use two for loops... Code:
print " |
Your right, I may end up changing the routine to a nested loop of some kind to catch the end of the list.
Your example brings to mind something I've been wanting to ask someone for a long time. I read a post on php.net about 2 years ago I think, where some guy benchmarked, do, for, foreach and while. The slowest was for when it came to speed and do being the fastest. If I remember correctly do is 60% faster than for. Since then, I stopped using for statements unless dealing with very small arrays. I try to trim off any excess load that I can. Have you noticed any speed difference between any of these? - |
All times are GMT -4. The time now is 12:49 AM. |
Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© Greenguy Marketing Inc