既然您已经展示了如何调用您的函数,我可以重现您的问题 - 即应该映射到否定域的引用数字不会。
这似乎是由于JavaScript对数字和字符串之间的区别非常松散 - 如果不确定如何处理两个数字(因为它们中的一个似乎是字符串),它假定你想要连接而不是加法。换句话说 - 通过将newMin
的值作为'-10'
而不是-10
,让你迷惑了JS。
作为一个简单的例子,
document.write('1' + '-2');
产生
1-2
然而,
document.write(1*'1' + 1*'-2');
导致
-1
你列入了“可能串联”它补充oldMin
表达:
newValue = (((oldValue - oldMin) * (newMax - newMin))/(oldMax - oldMin)) + newMin;
随着newMin设置为“-10”,你可能会得到newValue
看起来像6-10
而不是-4
,举一个例子。然后当你做了一个parseFloat
时,Javascript会悄悄地通过字符串直到减号,并返回6
而不是评估表达式并提出-4
。
要清理混乱,由1乘以每个参数,使其“一个真正的数字”:
oldMin = 1*oldMin;
oldMax = 1*oldMax;
newMin = 1*newMin;
newMax = 1*newMax;
oldValue = 1*oldValue;
当你在你的函数声明的开头添加这些行,一切工作顺利 - 不管你如何调用这个函数。或者只是将它的值称为不在引号中 - 这是在这个特定情况下造成麻烦的人。
document.writeln('the new code called with parameter = 100:\n');
document.writeln(linearScaling('0', '32761', '-10', '10', 100)+'<br>');
document.writeln('the old code called with parameter = 100:\n');
document.writeln(linearScalingOld('0.0', '32761.0', '-10.0', '10.0', '100.0')+'<br>');
document.writeln('the old code called with unquoted parameters:\n');
document.writeln(linearScalingOld(0.0, 32761.0, -10.0, 10.0, 100.0)+'<br>');
结果如下:
the new code called with parameter = 100: -9.94
the old code called with parameter = 100: 0.06
the old code called with unquoted parameters: -9.94
我希望这说明了问题的原因,以及解决方案。
我不会在参数值上使用'!='。做'!=='。 – 2013-03-06 17:44:55
首先删除'parseFloat'。 JavaScript只知道“数字”,没有“int”或“float”。 – kay 2013-03-06 17:45:33
范围(0 - > 20) - 10? – 2013-03-06 17:46:14