tags:

views:

67

answers:

4

I was hoping someone might help with a function that given two parameters:

@param $bytes : total amount in bytes of data consumed @param $rate : rate per GB, example .22 (for 22 cents)

@returns Total amount owed

Rounded to nearest cent of course. Thanks in advance for any help.

+3  A: 
function blah($bytes, $rate) {
    return number_format($bytes / 1000000000 * $rate, 2);
}

(Alternatively, you might want to use 1073741824 as the divisor.)

djc
+1  A: 

What about something like this :

function calc_price($bytes, $rate) {
    return ($bytes / (1024*1024*1024)) * $rate;
}

Basically :

  • take the number of bytes
  • convert it to gigabytes
  • multiply by the price per gigabyte

You could do the multiplication beforehand, to use 1073741824 in your code -- would be a bit faster ; but would make the code harder to understand, I suppose.


For example, the following portion of code :

var_dump(calc_price(2*1024*1024*1024, 0.22));

Will give you :

float 0.44


Note : this doesn't round to anything : it's a matter of presentation, and should be done at the presentation level, not in the function that does the calculation.

See the round and/or number_format functions, for that.

For example, the following portion of code :

$price = calc_price(2.56*1024*1024*1024, 0.22);
echo number_format($price, 2, '.', ',');

will give you :

0.56
Pascal MARTIN
+1  A: 
function cost($bytes, $rate, $precision = 2) {
    return number_format(($bytes / 1073741824) * $rate, $precision);
}
MatW
+1  A: 

This is going to entirely depend on how your company/process defines what a GB is.

I'd do it like this, probably

define( 'GIGABYTE', pow( 10, 9 ) );
// or
//define( 'GIGABYTE', pow( 1024, 3 ) );

function calcTotal( $bytes, $rate )
{
    return ( $bytes / GIGABYTE ) * $rate;
}
Peter Bailey