javascript中的float运算精度的一些问题,下面是具体的说明。
有人问到一个js问题:
var i = 0.07var r = i*100
alert(r)
结果为什么是7.0000000000000001?
查了下资料,其实JavsScript中,变量在存储时并不区分number和float类型,而是统一按float存储。而javascript使用IEEE 754-2008 标准定义的64bit浮点格式存储number,按照IEEE 754的定义: http://en.wikipedia.org/wiki/IEEE_754-2008
decimal64对应的整形部分长度为10,小数部分长度为16,所以默认的计算结果为“7.0000000000000001”,如最后一个小数为0,则取1作为有效数字标志。
类似地,可以想像,1/3的结果应该是0.3333333333333333。
那么如何校正这个值呢?
可以用以下方法:
一、parseInt
var r4=parseInt(i*100)
二、Math.round
var r2=Math.round((i*100)*1000)/1000
以上两种方法都可以得到7
附全部测试代码:
<html><head>
<title>测试脚本</title>
<script language="JAVASCRIPT">
function init()
{
var i = 0.07
var r = i*100
var r2=Math.round((i*100)*1000)/1000
var r3 = eval(i*100)
var r4=parseInt(i*100)
var r5=parseFloat(i*100*1.0000)
var r6=(1/3)
alert(r)
alert("Math.round="+r2)
alert("eval="+r3)
alert("parseInt="+r4)
alert("parseFloat="+r5)
alert(""+r6)
}
</script>
</head>
<body onload="init()">
</body>
</html>
将float类型转化为int类型有两种方法:
1、在计算时,可以使用向上取整Math.ceil(50/4),或者向下取整math.floor(50/4),或者四舍五入Math.round(50/4)
2、直接使用强制转化为整数的方法parseInt,parseInt(50/4)
1)parseInt 函数将其第一个参数转换为字符串,解析它,并返回一个整数或NaN。如果不是NaN,返回的值将是作为指定基数(基数)中的数字的第一个参数的整数。
2)parseInt有两个参数,第一个是需要转化的内容,第二个是需要转化的进制数,默认为十进制。也可以转化为八进制、十六进制、二进制。如下:
3)parseInt也可以将首部有”数字的字符串“转化为数字,例如:parseInt('12.0swrf')//返回:12
4)另外,还有一个与parseInt用法和作用类似的方法parseFloat(string,radix),parseFloat是将字符串或者数字,强制转化为浮点数类型。
扩展资料:
1、javascript是弱语言类型,定义变量时没有区分字符串,整数,浮点数。但是它很灵活,可以进行不同类型的转换。
2、javascript基本数据类型有以下几种:Number,String,Boolean,Undefined,Null,Symbol,可以根据Number,String,Boolean,Symbol这几种类型内置对象,将变量强制转换为对应的类型。如下:
参考资料:
MDN技术文档-parseInt 语法
MDN技术文档-js的数据类型和数据结构
用parseFloat(str)函数。例如:
var f = parseFloat('23.4')
alert(f-13)
这样的话alert出来的结果就是10.4
类似的还有parseInt(str)函数
介绍一个不错的js学习网站给你,上面有DOM和js对象的详细说明及属性、方法
http://www.w3school.com.cn/js/index.asp