mjones74
12-09-2006, 06:51 AM
Hi friends, here is a sloppy function that converts an input value to metric power notation. It's limited to +/-2 billion or so and seems to work ok, but might contain bugs. Suggestions appreciated. :D
<?php
// integer to metric units notation "2125314" --> "2.13M"
function ToMetric($in) {
if (($in >= 1000000000) || ($in <= -1000000000)) {
$divs = 1000000000;
$mul = 'G';
} elseif (($in >= 1000000) || ($in <= -1000000)){
$divs = 1000000;
$mul = 'M';
} elseif (($in >= 1000) || ($in <= -1000)) {
$divs = 1000;
$mul = 'k';
} elseif (($in >= 1) || ($in <= -1)) {
$divs = 1;
$mul = '';
} elseif ($in >= 0.001) {
$divs = 0.001;
$mul = 'm';
} elseif ($in >= 0.000001) {
$divs = 0.000001;
$mul = 'u';
} elseif ($in >= 0.000000001) {
$divs = 0.000000001;
$mul = 'n';
} else {
return 0; // only thing left :)
}
$end = ($in / $divs); // result is ones-based, i.e. 1.95252242
$end = round($end,2); // 1.96
$end = strval($end); // "1.96"
$end = $end.$mul; // "1.96M"
return $end;
}
// test
echo '<pre>';
echo '2 Gigabytes : ' . ToMetric(2097152000) . 'B<br>';
echo '2,204,222 Ohms : ' . ToMetric(2204222) . '<br>';
echo '1,245 Hertz : ' . ToMetric(1245) . 'Hz<br>';
echo '-5,041 Volts : ' . ToMetric(-5041) . 'V<br>';
echo '0.00144 Watts : ' . ToMetric(0.00144) . 'W<br>';
echo '-584,046 Amps : ' . ToMetric(-584046) . 'A<br>';
echo '0.0000001592s : ' . ToMetric(0.0000001592) . 's<br>';
echo '15 Beakers : ' . ToMetric(15) . ' Flasks<br>';
echo '-2 Students : ' . ToMetric(-2) . ' F\'s<br>';
echo '0 Ice cubes : ' . ToMetric(0) . ' Frozen Things<br>';
echo '</pre>';
?>
Results:
2 Gigabytes : 2.1GB
2,204,222 Ohms : 2.2M
1,245 Hertz : 1.25kHz
-5,041 Volts : -5.04kV
0.00144 Watts : 1.44mW
-584,046 Amps : -584.05kA
0.0000001592s : 159.2ns
15 Beakers : 15 Flasks
-2 Students : -2 F's
0 Ice cubes : 0 Frozen Things
<?php
// integer to metric units notation "2125314" --> "2.13M"
function ToMetric($in) {
if (($in >= 1000000000) || ($in <= -1000000000)) {
$divs = 1000000000;
$mul = 'G';
} elseif (($in >= 1000000) || ($in <= -1000000)){
$divs = 1000000;
$mul = 'M';
} elseif (($in >= 1000) || ($in <= -1000)) {
$divs = 1000;
$mul = 'k';
} elseif (($in >= 1) || ($in <= -1)) {
$divs = 1;
$mul = '';
} elseif ($in >= 0.001) {
$divs = 0.001;
$mul = 'm';
} elseif ($in >= 0.000001) {
$divs = 0.000001;
$mul = 'u';
} elseif ($in >= 0.000000001) {
$divs = 0.000000001;
$mul = 'n';
} else {
return 0; // only thing left :)
}
$end = ($in / $divs); // result is ones-based, i.e. 1.95252242
$end = round($end,2); // 1.96
$end = strval($end); // "1.96"
$end = $end.$mul; // "1.96M"
return $end;
}
// test
echo '<pre>';
echo '2 Gigabytes : ' . ToMetric(2097152000) . 'B<br>';
echo '2,204,222 Ohms : ' . ToMetric(2204222) . '<br>';
echo '1,245 Hertz : ' . ToMetric(1245) . 'Hz<br>';
echo '-5,041 Volts : ' . ToMetric(-5041) . 'V<br>';
echo '0.00144 Watts : ' . ToMetric(0.00144) . 'W<br>';
echo '-584,046 Amps : ' . ToMetric(-584046) . 'A<br>';
echo '0.0000001592s : ' . ToMetric(0.0000001592) . 's<br>';
echo '15 Beakers : ' . ToMetric(15) . ' Flasks<br>';
echo '-2 Students : ' . ToMetric(-2) . ' F\'s<br>';
echo '0 Ice cubes : ' . ToMetric(0) . ' Frozen Things<br>';
echo '</pre>';
?>
Results:
2 Gigabytes : 2.1GB
2,204,222 Ohms : 2.2M
1,245 Hertz : 1.25kHz
-5,041 Volts : -5.04kV
0.00144 Watts : 1.44mW
-584,046 Amps : -584.05kA
0.0000001592s : 159.2ns
15 Beakers : 15 Flasks
-2 Students : -2 F's
0 Ice cubes : 0 Frozen Things