日期:2014-05-16  浏览次数:20470 次

JS 计算结果的差异
今天在用JS做一个很简单的计算功能的时候发现一个小问题,计算2.3*33的结果居然是75.89999999999999 开始以为是没有转换的原因。后来各种转parseFloat Number之类的,可结果还是一样。我又在想是不是JS计算方式是不是有什么不同,可让做JAVA的同事计算,他的结果又是对的。表示很费解,求解答~谢谢

------解决方案--------------------
已测试,成功计算结果。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
<input type="text" id="i" value="2.3" onfocus="this.value='';" />
<button onclick="fun();">计算</button>
结果:<input type="text" id="result" />
<script language="javascript">
function $(Id){return document.getElementById(Id);}
function fun()
{
 var j = 33;
 var i = $('i');
 $('result').value = accMul(j,i.value);
}
function accMul(arg1,arg2)
{
  var m=0,s1=arg1.toString(),s2=arg2.toString();
  try{m+=s1.split(".")[1].length}catch(e){}
  try{m+=s2.split(".")[1].length}catch(e){}
  return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
}
</script>
</body>
</html>


附上关于js除法、加法小数计算出错的函数。
js中Number数字相乘后值不对
------解决方案--------------------
弱 类型语言都有这问题啊,一个浮点类型 和一个整型 做计算 返回一个浮点类型的
------解决方案--------------------
小数不能精确转换二进制的问题
java不用BigDecmail类的话也存在同样的问题
------解决方案--------------------
因为js计算的时候 都是转换成浮点数