JS 将 string 转换成为 number

本文介绍了JavaScript中数字转换及运算的各种方法,包括parseInt、parseFloat、Number等函数的使用细节,以及如何通过自定义函数解决浮点数运算的精度问题。

汇总一下各类方法:
1):parseInt
var x = parseInt("10"); // 10
带有两个参数:第一个是目标转换字符串,第二个用来指定将字符串转化为几进制的数字,并且radix的范围是(2~36)
parseInt(string, radix)

2):利用js变量弱类型转换,最近很喜欢用这种方式代码简洁

var a = "1000";

typeof(	  +a	)    //number

typeof(	  a-0	)    //number

typeof(	  a*1	)    //number

3):parseFloat 方法可以将对应的字符串转化为浮点类型的数字。
num.toFixed(2)可以四舍五入,保留两位小数,但会转换为String类型

 var x = "2.446242342" 
 var num =parseFloat(x); //typeof(num)  number
 num = num.toFixed(2); // 输出结果为 2.45     typeof(num) String

我们可以用取巧的方法达到保留两位小数的目的:
Math.floor(15.7784514000 * 100) / 100

4):Math.floor 的方式可以对字符和数字进行向下取整
Math.ceil(5/2)向上取整,有小数就整数部分加1

  var x = Math.floor("1000.01"); // 1000

  var x = Math.floor(1000.01); // 1000
  var x = Math.ceil(1000.01); // 1001
   
  var x = Math.floor(1000.91); // 1000

5):Math.round 的方式可以对字符和数字进行四舍五入取整

    var x = Math.round("1000"); //1000 equivalent to round("1000",0)

    var x = Math.round("1000.56"); // 1001

     var x = Math.round("1000.23"); // 1000

6):Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。示例如下:

Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number( "5.5 ") 5.5
Number( "56 ") 56
Number( "5.6.7 ") NaN
Number(new Object()) NaN
Number(100) 100

浮点数计算精度问题

0.1 => 0.0001 1001 1001 1001…(无限循环)
0.2 => 0.0011 0011 0011 0011…(无限循环)
其实对于浮点数的四则运算,几乎所有的编程语言都会有类似精度误差的问题,只不过在 C++/C#/Java 这些语言中已经封装好了方法来避免精度的问题,而 JavaScript 是一门弱类型的语言,从设计思想上就没有对浮点数有个严格的数据类型,所以精度误差的问题就显得格外突出。下面就分析下为什么会有这个精度误差,以及怎样修复这个误差。

下面是我的解决办法

//浮点数运算
//加法
function add(x,y){	 	
	var lenx = Math.floor(x) === x? 0:x.toString().split('.')[1].length,
		leny = Math.floor(y) === y? 0:y.toString().split('.')[1].length,
		num = Math.pow(10,Math.max(lenx,leny));
	return x*num+y*num/num
}

//乘法
function mul(x,y){
	var lenx = Math.floor(x) === x? 0:x.toString().split('.')[1].length,
		leny = Math.floor(y) === y? 0:y.toString().split('.')[1].length,
		len = lenx+leny;
	return Number(x.toString.replace(',',''))  * Number(y.toString.replace(',','')) /len
}
<think>我们正在处理用户的问题:如何在JavaScript中将字符串转换为数字? 根据引用,我们可以提供几种方法: 1. 使用parseInt()函数将字符串转换为整数。 2. 使用parseFloat()函数将字符串转换为浮点数。 3. 使用一元加号运算符(+)进行转换。 4. 使用Number()构造函数。 另外,引用[1]中提到了将数字转换为字符串的方法(加空字符串),但用户的问题是将字符串转换为数字,所以我们重点放在转换到数字。 我们还可以考虑其他方法,如乘以1、使用位运算符(但位运算符会将数字转换为32位整数)等,但最常用的是上述方法。 同时,引用[4]中提到了日期字符串的转换,但用户的问题是一般字符串到数字,所以我们不重点讨论日期。 因此,我们将介绍主要的转换方法,并给出示例。 注意:用户的问题中引用了多个来源,但我们需要根据问题选择相关信息。 步骤: 1. 介绍parseInt()和parseFloat() 2. 介绍一元加号运算符 3. 介绍Number()函数 4. 其他方法(简要) 5. 注意事项(如转换失败的情况) 由于用户要求使用中文回答,并且按照系统级指令,数学表达式使用$...$,但这个问题中数学表达式较少,主要是代码示例。 另外,生成相关问题。</think>### JavaScript 字符串数字方法详解 在 JavaScript 中将字符串转换为数字主要有以下几种方法: #### 1. **`parseInt()` 方法** 将字符串转换为整数(忽略小数部分),可指定进制: ```javascript parseInt("123"); // 123 (十进制) parseInt("1010", 2) // 10 (二进制转换) parseInt("0xF") // 15 (十六进制识别) ``` > 注意:遇到非数字字符会停止解析,如 `parseInt("12px")` 返回 `12`[^2]。 #### 2. **`parseFloat()` 方法** 转换为浮点数(保留小数): ```javascript parseFloat("3.14") // 3.14 parseFloat("3.14.5")// 3.14 (遇到第二个小数点停止) ``` #### 3. **一元加号运算符 (`+`)** 最简洁的隐式转换方法: ```javascript +"42" // 42 +"3.14" // 3.14 +"0xFF" // 255 (支持十六进制) +"Hello" // NaN (转换失败) ``` #### 4. **`Number()` 构造函数** 严格转换,整个字符串需为有效数字: ```javascript Number("123") // 123 Number("123abc") // NaN (完全无效则返回NaN) ``` #### 5. **其他方法** ```javascript // 位运算符转换 (32位整数) ~~"42" // 42 // 数学运算隐式转换 "42" * 1 // 42 ``` ### 注意事项 1. **NaN 处理**:转换失败时返回 `NaN`,可用 `isNaN()` 检测 2. **空字符串**:`Number("")` 返回 `0`,而 `parseInt("")` 返回 `NaN` 3. **null/undefined**:`Number(null)` 为 `0`,`Number(undefined)` 为 `NaN` 4. **性能**:一元加号 `+` 通常性能最优[^2] ### 示例场景 ```javascript // 用户输入处理 const userInput = document.getElementById('input').value; const numValue = +userInput || 0; // 转换失败时默认为0 // JSON数值转换 const data = JSON.parse('{"price": "9.99"}', (key, val) => key === "price" ? +val : val ); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值