既然您已經展示瞭如何調用您的函數,我可以重現您的問題 - 即應該映射到否定域的引用數字不會。
這似乎是由於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