JS 将 string 转换成为 number
2017-11-17 10:05
639 查看
汇总一下各类方法:
1):parseInt
带有两个参数:第一个是目标转换字符串,第二个用来指定将字符串转化为几进制的数字,并且radix的范围是(2~36)
2):利用js变量弱类型转换,最近很喜欢用这种方式代码简洁
3):parseFloat 方法可以将对应的字符串转化为浮点类型的数字。
num.toFixed(2)可以四舍五入,保留两位小数
我们可以用取巧的方法达到不保留两位小数的目的:
4):Math.floor 的方式可以对字符和数字进行向下取整
Math.ceil(5/2)向上取整,有小数就整数部分加1
5):Math.round 的方式可以对字符和数字进行四舍五入取整
6):Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。示例如下:
0.2 => 0.0011 0011 0011 0011…(无限循环)
其实对于浮点数的四则运算,几乎所有的编程语言都会有类似精度误差的问题,只不过在 C++/C#/Java 这些语言中已经封装好了方法来避免精度的问题,而 JavaScript 是一门弱类型的语言,从设计思想上就没有对浮点数有个严格的数据类型,所以精度误差的问题就显得格外突出。下面就分析下为什么会有这个精度误差,以及怎样修复这个误差。
下面是我的解决办法
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)可以四舍五入,保留两位小数
var x = "2.446242342" var num =parseFloat(x); //typeof(num) number num = num.toFixed(2); // 输出结果为 2.45
我们可以用取巧的方法达到不保留两位小数的目的:
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 }
相关文章推荐
- JS:类型转换string 转换成为 number
- JS 将 string 转换成为 number
- JS 将 string 转换成为 number
- JS 将 string 转换成为 number
- JS 将 string 转换成为 number
- js之类型转换与引用类型(Boolean/Number/String)
- js将某个值转换为String字符串类型或转换为Number数字类型
- js中parseInt()与parseFloat(),Number(),Boolean(),String()转换
- js中将String转换为number以便比较
- js之类型转换与引用类型(Boolean/Number/String)
- js类型转换与引用类型详解(Boolean_Number_String)
- js中parseInt()与parseFloat(),Number(),Boolean(),String()转换
- JS Number String转换
- JS Number String转换
- js之类型转换与引用类型(Boolean/Number/String) 1411111
- js类型转换与引用类型详解(Boolean_Number_String)
- js中parseInt()与parseFloat(),Number(),Boolean(),String()转换
- js中string和number类型互转换技巧(分享)
- js中将String转换为number以便比较
- js中string和number类型互转换技巧