解决Float.parseFloat(num)转化出现NaN的问题:用Float.isNaN(num1)判断转化值

目录

问题现象:

问题分析:

解决方法:


问题现象:

今天在给某个方法传入了一个int类型的0的值时,出现了以下报错:

Postman接口测试结果:


问题分析:

这是因为:

float number1 = Float.parseFloat(number.toString());

这个语句将字符串转化为float类型,而int类型0这个值的字符串"0";

对于float浮点数类型而言,0不是正常的浮点数;因此无法正常转化;

因此当传入的数据是0时,就会出现NaN报错:无法识别成数字.

具体的原因涉及到计算机底层存储数据时用到的位运算原则;有兴趣的小伙伴可以自行去了解一下.

这里我就提供一下解决方法.

可以通过

Float.isNaN(number1);

来对转化后的数据进行判断.

假如转化后时NaN则直接return 0;

注意:

这里是不能用number1==NaN来判断,因为NaN不等于NaN,比较特殊.


解决方法:

原代码:

修改为以下代码:

也就是在转化之前先判断一下.

Postman接口测试结果:

### JavaScript 中 `parseFloat` 的用法 在 JavaScript 中,`parseFloat` 是一种用于解析字符串并返回浮点数的方法。如果遇到无法解析的内容,则会停止解析并将已解析的部分作为结果返回[^1]。 #### 使用示例 以下是 `parseFloat` 的基本使用方法: ```javascript const str = "123.456abc"; const num = parseFloat(str); console.log(num); // 输出 123.456 ``` 当输入的字符串不包含有效的数字部分时,`parseFloat` 将返回 `NaN`。 --- ### 如何实现保留两位小数 为了将浮点数四舍五入到两位小数,可以采用以下几种方式之一: #### 方法一:使用 `toFixed()` 方法 `toFixed(n)` 可以将数字换为指定的小数位数,并返回一个字符串表示形式的结果。需要注意的是,该方法会对超出指定位数的部分进行四舍五入处理。 ```javascript const number = 123.456; const result = Number(number.toFixed(2)); console.log(result); // 输出 123.46 (注意这里是四舍五入后的结果) ``` #### 方法二:手动计算 通过乘除操作来控制精度,这种方法适用于需要更灵活控制的情况。 ```javascript function roundToTwoDecimals(value) { return Math.round((value + Number.EPSILON) * 100) / 100; // 加上 EPSILON 防止浮点误差 } const value = 123.456; const roundedValue = roundToTwoDecimals(value); console.log(roundedValue); // 输出 123.46 ``` 此方法利用了 `Math.round` 函数配合缩放因子(即乘以 100 后再除以 100),从而实现了精确到两位小数的效果。 --- ### 结合实际场景的应用案例 假设有一个表单字段接收用户的输入数据,我们希望验证其是否为合法的浮点数,并将其格式化为保留两位小数的形式。 ```javascript document.querySelector('.doc-example-live').input('personCount').on('change', function () { const inputVal = this.value.trim(); let parsedFloat = parseFloat(inputVal); if (!isNaN(parsedFloat)) { // 检查是否为有效数字 const formattedNumber = Number(parsedFloat.toFixed(2)); // 换为两位小数 console.log(`Formatted Value: ${formattedNumber}`); } else { console.error("Invalid float value"); } }); ``` 上述代码片段展示了如何监听用户输入事件,在接收到新后尝试解析成浮点数,并进一步对其进行格式化处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值