|
2005-05-12, 03:01 PM | #1 | ||
You tried your best and you failed miserably. The lesson is 'never try'
Join Date: Oct 2004
Posts: 166
|
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? - |
||
2005-05-12, 03:12 PM | #2 |
a.k.a. Sparky
Join Date: Sep 2004
Location: West Palm Beach, FL, USA
Posts: 2,396
|
$rounded_count = (int) ($count + 0.5);
unless you need bankers rounding. Most people don't.
__________________
SnapReplay.com a different way to share photos - iPhone & Android |
2005-05-12, 05:38 PM | #3 |
You tried your best and you failed miserably. The lesson is 'never try'
Join Date: Oct 2004
Posts: 166
|
Perfect!
- |
2005-05-12, 05:41 PM | #4 | |
Rock stars ... is there anything they don't know?
Join Date: Jun 2004
Location: in your imagination...
Posts: 12
|
Use ceil() function.
Quote:
__________________
Please Re-Read The Rules For Sig Files |
|
2005-05-12, 05:49 PM | #5 |
a.k.a. Sparky
Join Date: Sep 2004
Location: West Palm Beach, FL, USA
Posts: 2,396
|
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
__________________
SnapReplay.com a different way to share photos - iPhone & Android |
2005-05-13, 12:36 PM | #6 | ||||
You tried your best and you failed miserably. The lesson is 'never try'
Join Date: Oct 2004
Posts: 166
|
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! - |
||||
2005-05-13, 01:13 PM | #7 |
a.k.a. Sparky
Join Date: Sep 2004
Location: West Palm Beach, FL, USA
Posts: 2,396
|
generally I use modulo or % to do this.
basically, set your $loop = 0; if ($loop % 7) { print "</tr><td>" } $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 "<table>"; for ($loop=0;loop<$numcols;loop+=7) { print "<tr>"; for ($loop2=$loop;$loop2<$loop+7;$loop2++) { print "<td>asdfa</td>"; } print "</tr>"; } print "</table>";
__________________
SnapReplay.com a different way to share photos - iPhone & Android |
2005-05-13, 03:48 PM | #8 |
You tried your best and you failed miserably. The lesson is 'never try'
Join Date: Oct 2004
Posts: 166
|
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? - |
|
|