关于parseInt()函数在使用过程中遇到的疑惑解决

本文探讨了一行代码parseInt(Math.random()*10)的功能,该代码用于生成0到10之间的随机整数。虽然Math.random()*10返回的是数字而非字符串,但parseInt函数仍能正确处理并转换。文章通过查阅MDN文档揭示了parseInt函数如何处理非字符串输入。

今天笔者在一行代码中看到parseInt(Math.random()*10)返回一个0~10之间的整数,这条语句能够正常执行并且返回想要的结果,可是笔者发现了一个问题。parseInt(string,radix)中第一个参数不应该是string吗?

于是笔者执行了第一个操作:

发现Math.random()*10返回的为一个数字类型,它并不是string类型,为什么在使用parseInt()对其进行转换的时候,程序没有报错呢?

最终在MDN上找到对parseInt()函数string参数的解读如下:

这就是原因啦~

 

下为MDN解释链接:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

转载于:https://my.oschina.net/u/3254591/blog/1421799

在 Arduino 中,`parseInt()` 是串口通信中常用的函数之一,用于从串口接收的字符串数据中提取出整数部分。该函数会跳过字符串中的非数字字符,直到遇到第一个有效的数字字符,并将其后连续的数字字符转换为整数[^1]。 ### 使用方法 #### 1. 基本用法 `parseInt()` 函数通常与 `Serial` 对象一起使用,例如: ```cpp int value = Serial.parseInt(); ``` 上述代码会从串口缓冲区中读取并解析出一个整数。如果串口缓冲区中没有有效整数数据,函数可能会阻塞等待输入,或者返回 0(具体行为取决于 Arduino 版本设置)。 #### 2. 设置超时时间 为了避免无限期等待数据,可以配合 `setTimeout()` 使用,设定最大等待时间: ```cpp Serial.setTimeout(1000); // 设置最大等待时间为 1000 毫秒 int value = Serial.parseInt(); ``` 如果在指定时间内没有接收到完整的整数数据,`parseInt()` 将停止等待并返回已解析的部分或 0。 #### 3. 示例代码 以下是一个完整示例,演示如何通过串口接收字符串,并从中提取整数值,然后控制舵机旋转到对应角度: ```cpp #include <Servo.h> Servo myServo; void setup() { Serial.begin(9600); myServo.attach(9); // 舵机连接到数字引脚 9 } void loop() { if (Serial.available() > 0) { int angle = Serial.parseInt(); // 解析整数 Serial.println(angle); // 回传解析结果 myServo.write(angle); // 控制舵机转动到指定角度 } } ``` #### 4. 注意事项 - `parseInt()` 只能处理十进制整数。 - 若字符串中包含多个整数,仅解析第一个出现的整数。 - 如果需要处理更复杂的输入格式(如 `"*#AB45"`),可先使用 `readString()` 获取整个字符串,再结合其他字符串处理函数进行分析[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值