【发布时间】:2013-03-06 17:42:22
【问题描述】:
我制作了一个缩放函数,它采用区间 [oldMin,oldMax] 中的数字并将它们线性缩放到范围 [newMin,newMax] 。使用负值时似乎不起作用。
function linearScaling(oldMin, oldMax, newMin, newMax, oldValue){
var newValue;
if(oldMin !== oldMax && newMin !== newMax){
newValue = parseFloat((((oldValue - oldMin) * (newMax - newMin)) / (oldMax - oldMin)) + newMin);
newValue = newValue.toFixed(2);
}
else{
newValue = error;
}
return newValue;
}
当将一个值从 0 -> 32761 缩放到范围 0 -> 10 时,此函数似乎有效。但是,当给定一个新的负范围,即 -10 -> 10 时,它似乎没有给出正确的输出
我已尽力在this site 上找到答案。然而,提出这个问题的人没有提到他最终做了什么来解决这个问题。这个问题说它可能与混合数据类型有关,但是我将所有内容都转换为浮点数我错过了什么吗?
【问题讨论】:
-
我不会在参数值上使用
!=。做!==. -
首先删除
parseFloat。 JavaScript 只知道“数字”,不知道“int”或“float”。 -
范围 (0 -> 20) - 10 ?
-
你的函数对我有用:
linearScaling(0, 20, -10, 10, 5)=>"-5.00" -
也许您也应该使用更多行:
v -= oldMin; v /= oldMax; v *= newMax; v += newMin;。
标签: javascript function scaling