尝试将数据库中的整数添加到 let 但总是返回 NaN

Posted

技术标签:

【中文标题】尝试将数据库中的整数添加到 let 但总是返回 NaN【英文标题】:Trying to add ints from database to a let but always returning NaN 【发布时间】:2020-01-15 06:08:05 【问题描述】:

我一直在尝试从我的数据库 (mysql/phpMyAdmin) 中的表中获取一些数字并将它们添加到代码中的“let”中,但最终输出始终为 NaN。

我尝试使用 parseInt() 函数以防表中的数字被视为字符串但没有成功。

var pointsQuery = "SELECT * FROM reacts WHERE userid=" + message.author.id;
con.query(pointsQuery, function (err, rows, fiedls) 
if (err) 
  message.channel.send(err.message);
  throw err;

let upvotes = 0;
let downvotes = 0;
for (var i in rows) 
   upvotes = upvotes + parseInt(rows[i].upvotes, 10);
    downvotes = downvotes + parseInt(rows[i].downvotes, 10);

upvotes = upvotes - parseInt(rows, 10);
downvotes = downvotes - parseInt(rows, 10);

console.log("up: " + upvotes);
console.log("down:" + downvotes);

let finalPoints = 10 + parseInt((upvotes - (downvotes * 2)), 10);

message.channel.send("<@" + message.author.id + "> has " + finalPoints + " points!");

)

我用于“调试”的两个 console.log 的输出应该是一个数字,但输出的是“NaN”。 final points 应该是表达式 10 + (upvotes - (downvotes * 2)) 的结果

【问题讨论】:

如果 rows 是一个数组,那么这将导致您的问题:upvotes = upvotes - parseInt(rows, 10); 不确定那或下一行是什么意思 你可以试试 parseInt(rows[i]);不要在里面写10 @Pete @Deepak Jha,rows 是一个数组,但在 for 循环中使用时,它似乎像 int 一样工作,用于告诉代码它必须执行多少次循环。我假设如果我解析rows,它会在此处执行与for 循环相同的操作。我试图在没有基数 (10) 的情况下解析 rows,但它仍然输出 NaN。 在第 13、14 行,upvotes = upvotes - parseInt(rows, 10);downvotes = downvotes - parseInt(rows, 10); 应该做什么?你不能解析和数组到一个数字。像循环一样添加索引,也许你的意思是array.Last() 如果你想减去总行数,你需要根据你的框架使用array.Lengtharray.Count指定你想要的长度。此外,您确实应该创建一个变量 let len = parseInt(rows.Length, 10); 来减去,因为您使用相同的值执行两次,并且您不应该浪费资源 【参考方案1】:

在第 13 行和第 14 行中,您尝试将其解析并排列成一个 Int 是不可能的。如果您想减去总行数,您需要根据您的框架使用array.Lengtharray.Count 指定您想要的长度。此外,您确实应该创建一个变量 let len = parseInt(rows.Length, 10); 来减去,因为您使用相同的值执行了两次,并且您不应该浪费资源 (来自 cmets 的转贴答案)

代码:

let len = parseInt(rows.Length, 10);
upvotes = upvotes - len;
downvotes = downvotes - len;

【讨论】:

以上是关于尝试将数据库中的整数添加到 let 但总是返回 NaN的主要内容,如果未能解决你的问题,请参考以下文章

尝试添加两个整数但向量错误

在 Cuda 中简单地添加两个 int,结果总是相同的

整数除法总是零[重复]

第一个 sqLite 数据库:尝试将整数添加到数据库

在 O(n) 时间内找到数组中的 10 个最大整数

为啥 findFragmentById 总是返回 null