【问题标题】:convert string to number node.js将字符串转换为数字 node.js
【发布时间】:2016-05-17 08:54:02
【问题描述】:

我正在尝试将 req.params 转换为 Number,因为这是我在架构中为 year 参数定义的。

我试过了

req.params.year = parseInt( req.params.year, 10 );  

Number( req.params.year);

1*req.params.year;

但它们都不起作用。 我需要安装一些东西吗?

【问题讨论】:

  • 对不起,我没有看到您发布的其余代码。然后尝试 parseInt(req.params.year.replace(/[^0-9]/g, ''),10)
  • 你能控制 req.params.year 并告诉我你得到了什么。
  • 要求。 婴儿车 .year 或 req. 参数 .year?
  • 是的,这是一个打字错误

标签: node.js string type-conversion


【解决方案1】:

您不必安装任何东西。

parseInt(req.params.year, 10);

应该可以正常工作。

console.log(typeof parseInt(req.params.year)); // returns 'number'

如果您使用 parseInt,您的输出是什么?还是字符串吗?

【讨论】:

  • 我认为您使用的是 express 对吗?我从来没有使用过这个包,但它可能是,参数只是只读的吗?什么,如果你创建一个自己的变量? var p = parseInt(req.params.year);
  • 有什么不同?为什么它以这种方式工作?对不起,我正在学习nodejs,所以我很好奇。
  • @Sang Đặng 没有区别。变量 req.params 由 express-package 创建并设置为只读。所以你必须声明一个自己的读写变量。
  • 啊,这就是为什么他不能在第一次尝试中把它放回去(在他上面的问题中。)谢谢你帮助我。
  • 我得到ReferenceError: parseint is not defined `const { a } = req.body; app.post 中的 console.log(parseint(a))`。 parseInt 是这样写的,我的错。
【解决方案2】:

使用 parseInt() 是个坏主意,主要是因为它永远不会失败。还因为某些结果可能是出乎意料的,例如 INFINITY。
下面是处理意外行为的函数。

function cleanInt(x) {
    x = Number(x);
    return x >= 0 ? Math.floor(x) : Math.ceil(x);
}

查看以下测试用例的结果。

console.log("CleanInt: ", cleanInt('xyz'), " ParseInt: ", parseInt('xyz'));
console.log("CleanInt: ", cleanInt('123abc'), " ParseInt: ", parseInt('123abc'));
console.log("CleanInt: ", cleanInt('234'), " ParseInt: ", parseInt('234'));
console.log("CleanInt: ", cleanInt('-679'), " ParseInt: ", parseInt('-679'));
console.log("CleanInt: ", cleanInt('897.0998'), " ParseInt: ", parseInt('897.0998'));
console.log("CleanInt: ", cleanInt('Infinity'), " ParseInt: ", parseInt('Infinity'));

结果:

CleanInt:  NaN  ParseInt:  NaN
CleanInt:  NaN  ParseInt:  123
CleanInt:  234  ParseInt:  234
CleanInt:  -679  ParseInt:  -679
CleanInt:  897  ParseInt:  897
CleanInt:  Infinity  ParseInt:  NaN

【讨论】:

  • 这不太正确。 parseInt('123abc')) 抛出错误,它不验证为数字 123
  • 我不确定你的环境。我已经根据节点版本 v10.2.1 给出了输出。
  • 在节点 13.8 parseInt('123abc') -> 123
【解决方案3】:

不是一个完整的答案 好的,这只是补充有关 parseInt 的信息,它仍然非常有效。 Express 根本不允许修改 req 或 res 对象(不可变)。因此,如果您想有效地修改/使用这些数据,则必须将其复制到另一个变量(var year = req.params.year)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 2013-06-29
    • 2020-02-23
    • 2013-07-14
    • 2019-10-10
    • 2014-02-25
    • 2023-03-25
    相关资源
    最近更新 更多