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>
js如何保证时间精准不跳秒js如何保证时间精准不跳秒
1. 使用`window.performance.now()`方法来获取高精度的时间戳,它会返回当前时间和距离页面加载的时间的差值,可以保证精准到微妙级别。
2. 使用`setTimeout()`和`setInterval()`函数来定时调用,这样可以保证时间的精准性。
3. 使用`Date.now()`方法来获取当前时间戳,它可以保证精准到毫秒级别。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)