JS parseFloat用法及精度问题
使用parseFloat()转换浮点数
parseFloat() 的作用 被描述为 Parses a string argument and returns a floating point number..
parseFloat() 的使用方式:var num = parseFloat(string);
parseFloat() 方法与parseInt()方法的处理方式相似,从位置0开始查看每个字符,直到找到第一个非有效的字符为止,
然后把该字符之前的字符串转换成整数。不过,对于这个方法来说,第一个出现的小数点是有效字符。如果有两个小数点,
第二个小数点将被看作无效的。parseFloat() 会把这个小数点之前的字符转换成数字!并且,与parseInt()不同。
parseFloat() 要求输入的字符串必须以十进制表示浮点数。所以,八进制数'010'会被转换成10,而十六进制数'0xF'会被解析成0
举例如下:
var num = parseFloat("123abc"); //返回 123
var num = parseFloat("0xA"); //返回 0
var num = parseFloat("11.2"); //返回 11.2
var num = parseFloat("11.22.33"); //返回 11.22
var num = parseFloat("0102"); //返回 102
var num = parseFloat("red"); //返回 NaN
精度问题:先看一个例子
<script language="javascript">
var a = "0.1";
var b = "0.2";
var sum1 = parseFloat(a)+parseFloat(b);
var sum2 = (parseFloat(a)+parseFloat(b)).toFixed(4);
document.write("a+b="+sum1);
document.write("<br/>")
document.write("a+b="+sum2)
</script>
猜想一下结果,你一定会感觉到这太简单了 a+b=0.3
然而结果并非如此
a+b=0.30000000000000004
a+b=0.3000
我们可能会感到惊讶不知道这是为什么我们来看看真正的原因
浮点数都会有精度问题.浮点数移位机内表示方法的问题.做的是移位运算,所以不管是在表示还是运算时,都会出现误差