另一种变化:
// Converts a range of numbers to a percentage scale
// $n number to convert
// $lRange lowest number of the range [-6 default]
// $hRange highest number in the range [6 default]
// $scale percentage scale [100 default]
function toPct($n, $lRange = -6, $hRange = 6, $scale = 100){
// reversed high and low
if ($lRange > $hRange){
$lRange = $lRange + $hRange;
$hRange = $lRange - $hRange;
$lRange = $lRange - $hRange;
}
// input validation
if ($n < $lRange || $n > $hRange) {
trigger_error('$n does not fall within the supplied range', E_USER_ERROR);
return FALSE;
}
// edge cases
if ($n == $lRange) return 0;
if ($n == $hRange) return $scale;
// everything in between
$range = $hRange - $lRange;
if ($lRange < 0){
$n += abs($lRange);
}
return ($n / $range) * $scale;
}
示范:
$lRange = -6; $hRange = 6;
for ($i = $lRange; $i <= $hRange; $i++){
echo $i . ' = ' . toPct($i, $lRange, $hRange) . PHP_EOL;
}
输出:
-6 = 0
-5 = 8.3333333333333
-4 = 16.666666666667
-3 = 25
-2 = 33.333333333333
-1 = 41.666666666667
0 = 50
1 = 58.333333333333
2 = 66.666666666667
3 = 75
4 = 83.333333333333
5 = 91.666666666667
6 = 100