Number() 用于字符串 returns Nan

Number() when used on a string returns Nan

这是我正在处理的代码:

app.put("/transaction/:value/:id1/:id2", async(req,res) => {
    try {
        const {value,id1,id2} = req.params;

        const bal1 = await pool.query("Select balance from balance where id=",[id1]);
        const bal2 = await pool.query("Select balance from balance where id=",[id2]);

        const ball1 = JSON.stringify(bal1.rows[0].balance);
        const ball2 = JSON.stringify(bal2.rows[0].balance);
        const convball1 = Number(ball1);
        
        console.log(convball1);

这是我正在尝试进行的 PERN 项目,我需要将 convball1 值作为 int 来进一步测试条件,但我无法将其作为 int 使用。

从数据库中检索 bal1 值时,结果如下:[{"balance":"50"}] 这就是为什么要在 ball1 处进行清理。但是 ball1 的值显示为 "50".

需要ball1有整数

更新: 我如上所述使用 parseInt() 而不是 Number(),但我得到了同样的错误。因此,我检查了 MDN 网络文档中的 parseInt() 函数,他们提到使用另一个名为 radix 的参数。

因此,基数为 10 会将十进制数转换为 int 格式,但我不确定我是否做对了。 得到同样的错误

使用 + 号就是这样,将字符串转换为数字

const convball1 = +ball1;

您提到您得到 [{"balance":"50"}] 作为输出;

当我这样做时 [{"balance":"50"}][0].balance 我会得到“50”,Number("50") 会给我 50。

您正在做的 JSON.stringify([{"balance":"50"}][0].balance) 将导致“50”,而 Number(“50”) 将是 Nan

避免 JSON.stringify 你会很好。

输出结果为 JSON,所以我的建议是使用 JSON.parse() 将其解析为一个对象。

这是一个例子:

const ball1 = JSON.parse('[{"balance":"50"}]');
console.log(parseInt(ball1[0].balance));

您的方法不起作用的原因是因为您尝试使用 Number() 解析无效数字,它无效是因为它在字符串中包含字母和特殊字符,例如“balance”和“[]”字符, 所以它当然会 return NaN.