0

我有一个函数可以对两个数字进行一些数学运算,但我似乎得到了 NaN 作为它的回报......我不知道为什么......这是我的函数:

function mouseConvert(mousex,mousey){

 console.log(mousex+ ' '+ mousey);

    var x = (mousex + Data.offset_x) - (settings.width/2) - settings.offset_left;
    var y = (mousey + Data.offset_y) - settings.offset_top;
    var tx = Math.round((x + y * 2) / settings.grid) - 1;
    var ty = Math.round((y * 2 - x) / settings.grid) - 1;

 console.log(tx+ ' '+ ty);

return [tx,ty];
} 

该函数的控制台日志输出显示:

在此处输入图像描述

Data这是和的值settings

在此处输入图像描述

为什么它不返回数字而是返回 NaN ?

4

2 回答 2

3

好吧,如果鼠标位置是类似的字符串"0",请考虑:

(mousex + Data.offset_x)

变成

"0" + -32 //"0-32"

然后,当您使用 进行减法时,该字符串"0-32"将尝试转换为数字- (settings.width/2)。并且Number("0-32")NaN,之后一切都变成了NaN

您应该在开始时将它们转换为数字。或者更确切地说,永远不要将它们转换为字符串,因为事件对象已经将它们作为数字......

于 2012-12-07T21:24:01.937 回答
0

你必须将 mouseX 和 mouseY 转换为 int 或 float parseInt 或 parseFloat

<html>
<head>
</head>
<body>
<script>
var Data = { ipos: NaN, jpos: NaN, level: "1", money: "1000", offset_x: -32, offset_y: -250};
var settings = { grid: 64, height: 500, offset_left: 258, offset_top: 85, width: 1165};

function mouseConvert(mousex,mousey){
 mousex = parseInt(mousex);
 mousey = parseInt(mousey); 
console.log(mousex+ ' '+ mousey);

    var x = (mousex + Data.offset_x) - (settings.width/2) - settings.offset_left;
    var y = (mousey + Data.offset_y) - settings.offset_top;
    var tx = Math.round((x + y * 2) / settings.grid) - 1;
    var ty = Math.round((y * 2 - x) / settings.grid) - 1;

 console.log(tx+ ' '+ ty);

return [tx,ty];
}
mouseConvert('0', 1);
</script> 
</body>
</html>

返回

0 1 
-25 2 

没有 parseInt 它将返回Nan

于 2012-12-07T21:15:20.530 回答