【发布时间】:2018-10-28 18:04:15
【问题描述】:
我正在尝试将一个十进制数字范围映射到另一个。在下面的示例中,范围 0.0 -> 2.0 映射到 0.0 -> 0.8。我似乎无法让输出范围达到 0.8 - 它在 0.722 处停止。我认为的问题是如何计算比例变量,但我不确定如何解决它。谁能看到我哪里出错了?
function myscale (num, in_min, in_max, out_min, out_max, factor)
{
// number map
var scale = Math.max(0.0, num - in_min) / (in_max - in_min);
// calculate easing curve
var r = out_min + (Math.pow(scale, factor) * (out_max - out_min));
// 64-bit floating point representation fix
r = parseFloat(r.toFixed(10));
// return mapped scale number
return r;
}
var text = "";
var i;
for (i = 0.0; i <= 2.0; i = i + 0.1)
{
text += myscale(i, 0.0, 2.0, 0.0, 0.8, 2) + "<br />";
}
document.getElementById("demo").innerHTML = text;
<!DOCTYPE html>
<html>
<body>
<b>Numbers mapped from 0 to 0.8</b>
<p id="demo"></p>
</body>
</html>
【问题讨论】: