手机版 | 登录 | 注册 | 留言 | 设首页 | 加收藏
联系客服
当前位置: 网站首页 > 秘诀窍门 > 文章 当前位置: 秘诀窍门 > 文章

请问javascript中60*0.12结果怎么是7.199999999999999?

时间:2021-07-29    点击: 次    来源:网络    添加者:佚名 - 小 + 大

用javascript,60*0.12算出的结果竟然是7.199999999999999
61*0.12 是7.319999999999999
62*0.12是 7.4399999999999995
代码如下:

60 7.199999999999999
61 7.319999999999999
62 7.4399999999999995

<html>
<meta http-equiv="Content-Language" content="zh-cn">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<head>
<title>卷面分</title>

<script language="javascript">

function checktotal(){
var myform=document.firstform;

var count=myform.count.value;
feiyong=count*0.12;

if (count<49) {
document.all.tishi.innerText=" 当前卷面总分:"+feiyong;
}
else {

document.all.tishi.innerText=" 当前卷面总分:"+feiyong;
}
}

</script>

</head>

<body onload="checktotal();">

<form method="POST" action="createpaper.asp" name="firstform" >

<input type="text" name="count" size="18" onkeyup="if(isNaN(this.value)) this.value='0';" onblur="this.className='inputnormal';checktotal();" value="0" ></p>
<p id="tishi"> </p>
</form>

</body>

</html>

 

3个回答
网海1书生 
科技发烧友
 
2021-07-09 · 擅长软件设计、WEB应用开发、小程序
展开全部

这是由电脑的浮点数运算误差造成的,这个误差是一定会存在的,不可避免。这是因为电脑无法精确地表示一个位数不确定的实数(比如说圆周率π,哪怕是把全世界的内存条都用来储存也无法完整储存),所以只能用固定的位数来近似地表示(也就是浮点数),这样就不可避免造成运算误差。要想尽可能减少这种误差,就要尽量把浮点数运算转换为整数运算,比如你题目中所说的例子可以这样来算:

6000*12/10000 = 7.2

6100*12/10000 = 7.32

6200*12/10000 = 7.44

补充说一下:并不是说只有在JavaScript中才会有这种现象,在所有程序设计语言比如C、C++、Java、Python、VB等等中都一样存在的

互联网达人小J 
2021-07-09 · 10年互联网从业经验,专注互联网知识分享。
展开全部

在js 的计算中如果涉及到小数的运算,那结果可不要想当然了,比如  0.1+0.2 的计算 :

var num1 = 0.1; 

var num2 = 0.2;

console.log(num1+num2)

如果不加思考 那回答估计是 0.3  实际上的结果是 0.30000000000000004

为什么会有这个结果呢?

首先,我们要站在计算机的角度思考 0.1 + 0.2 这个看似小儿科的问题。我们知道,能被计算机读懂的是二进制,而不是十进制,所以我们先把 0.1 和 0.2 转换成二进制看看:

0.1==》0.1.toString(2)==》0.0001100110011(无限循环..)

0.2==》0.2.toString(2)==》0.001100110011(无限循环..)

双精度浮点数的小数部分最多支持 52 位,所以两者相加之后得到这么一串 0.0100110011001100110011001100110011001100110011001100 因浮点数小数位的限制而截断的二进制数字,这时候,我们再把它转换为十进制,就成了 0.30000000000000004。

原来如此,那怎么解决这个问题呢?我想要的结果就是 0.1 + 0.2 === 0.3 啊!!!

正确方法:

parseFloat((0.1 + 0.2).toFixed(10))

周珊珊_ 
2021-07-09
这是JavaScript浮点运算自身机制,js自身的问题,不用想太多了。
比如:7*0.8 JavaScript算出来就是:5.6000000000000005 .
用Number()或者 toFixed自己处理一下,看你自己爱好了。

 

分享按钮

上一篇:在javascript中,0.6*3,结果为什么是1.799999999998,怎么才能变成应得的1.8;如何将3*3的结果格式化为9.0,..

下一篇:获取微信信息手机号码及相关信息

豫ICP备19032584号-1  |   QQ:80571569  |  地址:河南濮阳市  |  电话:13030322310  |  
Copyright © 2024 FE内容付费系统 版权所有,授权www.xingwp.cn使用 Powered by 66FE.COM