Jump to content

Solution needed for rounding number in php


nawtwrong

Recommended Posts

I have a list of pre determined numbers set as variables, I need a way of rounding these numbers to the nearest high or lower match in that list, to a number that a visitor will type in:

For example there will be a form with an input box for a number that the user types in. This will be submitted to a script where each of the pre-determined numbers in the list mentioned above will be stored as variables:

$number_1 = 1000 $number_2 = 2000 $number_3 = 3000 $number_4 = 4000 $number_5 = 10,000 etc

The user might type in a number like 2921, so the script would need to round this [b]up[/b] to 3000 ($number_3) the next highest in the list above.

I also want another script that would round the number [b]down[/b] so 9999 would be rounded down to 4000 ($number_4) the next lowest in the list above.

Is there a nice, simple way of doing this? I was thinking the numbers for the list could be stored in an array and maybe I could use the round() function, but I've no idea where to start.

Any advive or suggestions greatly appreciated.

Link to comment
Share on other sites

[!--quoteo(post=356334:date=Mar 19 2006, 05:22 AM:name=nawtwrong)--][div class=\'quotetop\']QUOTE(nawtwrong @ Mar 19 2006, 05:22 AM) [snapback]356334[/snapback][/div][div class=\'quotemain\'][!--quotec--]
I have a list of pre determined numbers set as variables, I need a way of rounding these numbers to the nearest high or lower match in that list, to a number that a visitor will type in:

For example there will be a form with an input box for a number that the user types in. This will be submitted to a script where each of the pre-determined numbers in the list mentioned above will be stored as variables:

$number_1 = 1000 $number_2 = 2000 $number_3 = 3000 $number_4 = 4000 $number_5 = 10,000 etc

The user might type in a number like 2921, so the script would need to round this [b]up[/b] to 3000 ($number_3) the next highest in the list above.

I also want another script that would round the number [b]down[/b] so 9999 would be rounded down to 4000 ($number_4) the next lowest in the list above.

Is there a nice, simple way of doing this? I was thinking the numbers for the list could be stored in an array and maybe I could use the round() function, but I've no idea where to start.

Any advive or suggestions greatly appreciated.
[/quote]
something like this[code]<?php
function my_round($n,$a) {
    sort($a);
    $out=$a[0];
    $p=abs($n-$out);
    for ($i=1;$i<count($a);$i++) {
        if (abs($a[$i]-$n)<=$p) {
            $out=$a[$i];
            $p=abs($n-$out);
        }
    }
    return $out;
}

function my_round_down($n,$a){
    sort($a);
    $out=$a[0];
    for ($i=0;$i<count($a);$i++) {
        if ($a[$i]<$n){
            $out=$a[$i];
        }
    }
    return $out;
}

$pre=array(1000,2000,3000,4000,10000);
$number=9999;

echo "for number ".$number."<br />\n";
echo "my_round is: ".my_round($number,$pre)."<br />\n";
echo "my_round_down is: ".my_round_down($number,$pre)."\n";
?>[/code]
Link to comment
Share on other sites

I've got the code working how I need it to, but there's just one problem:

"Fatal error: Cannot redeclare my_round_down()"

I'm excecuting this code using [code]include("../code.php");[/code] inside a while loop which is what's causing the error. However, I've tried using require_once, this clears the error message, but causes the function to do the same thing to [i]all[/i] the values that need rounding in the while loop.

Is there a way round this? The my_round_down() function (exactly as above) needs to run for each number in a while loop and round each number individually.

Thanks
Link to comment
Share on other sites

[!--quoteo(post=356577:date=Mar 20 2006, 05:36 AM:name=nawtwrong)--][div class=\'quotetop\']QUOTE(nawtwrong @ Mar 20 2006, 05:36 AM) [snapback]356577[/snapback][/div][div class=\'quotemain\'][!--quotec--]
I've got the code working how I need it to, but there's just one problem:

"Fatal error: Cannot redeclare my_round_down()"

I'm excecuting this code using [code]include("../code.php");[/code] inside a while loop which is what's causing the error. However, I've tried using require_once, this clears the error message, but causes the function to do the same thing to [i]all[/i] the values that need rounding in the while loop.

Is there a way round this? The my_round_down() function (exactly as above) needs to run for each number in a while loop and round each number individually.

Thanks
[/quote]
move declaration of function(s) oueside loop. something like this[code]//start of file
include('../code.php');

// some code

$pre=Array(1000,2000 and so on); // if this array is constant you can defined it in code.php

my_round_down(1234,$pre); // use this where you want, in or out the loop

[/code]
Link to comment
Share on other sites

Thanks for your reply.

I've got the majority of this code working now, however for some reason, when I round certain numbers up or down I get the same number from the list, for example:


[code]function my_round_down($n,$a){
    sort($a);
    $out=$a[0];
    for ($i=0;$i<count($a);$i++) {
        if ($a[$i]<$n){
            $out=$a[$i];
        }
    }
    return $out;
}



function my_round($n,$a) {
    sort($a);
    $out=$a[0];
    $p=abs($n-$out);
    for ($i=1;$i<count($a);$i++) {
        if (abs($a[$i]-$n)<=$p) {
            $out=$a[$i];
            $p=abs($n-$out);
        }
    }
    return $out;
}

$number = 6987; //Or whatever number has been submitted from a form

$pre=array(5000,10000,15000,25000,50000,75000,100000,125000,200000,300000,400000,500000,
1500000);

$new_number_rounded_down = my_round_down($number,$pre);

$new_number_rounded_up = my_round($number,$pre);


echo $new_number_rounded_down; //Gives 5000

echo $new_number_rounded_up; //Gives 5000 (should give 10000)[/code]


If I swap $number for something like 92000 it gives the correct lower and higher rounded numbers.

I've had a look but not sure what i'm doing wrong. Any ideas?

Thanks



Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.