【问题标题】:Number() when used on a string returns NanNumber() 在字符串上使用时返回 Nan
【发布时间】:2020-07-24 18:46:38
【问题描述】:

这是我正在处理的代码:

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=$1",[id1]);
        const bal2 = await pool.query("Select balance from balance where id=$1",[id2]);

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

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

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

需要 ball1 有一个整数

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

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

【问题讨论】:

  • 在这种情况下使用 parseInt 而不是 Number。
  • 你为什么要把它串起来?

标签: javascript node.js postgresql rest parseint


【解决方案1】:

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

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

你正在做 JSON.stringify([{"balance":"50"}][0].balance) 将导致 ""50"" 并且 Number(""50"") 将是 Nan

避免JSON.stringify,你会很好。

【讨论】:

    【解决方案2】:

    使用+号就可以了,将字符串转换为数字

    const convball1 = +ball1;
    

    【讨论】:

      【解决方案3】:

      输出为 JSON,因此我的建议是使用 JSON.parse() 将其解析为对象。

      这是一个例子:

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

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

      【讨论】:

        猜你喜欢
        • 2021-12-20
        • 2018-08-26
        • 1970-01-01
        • 2023-02-25
        • 1970-01-01
        • 2016-06-21
        • 2019-07-17
        • 1970-01-01
        • 2016-11-11
        相关资源
        最近更新 更多