<HTML>
<HEAD>
<script>
function doi()
{
var i = document.getElementById("aaa").value;
/// var i =53643.1;
alert((i/10000));
}
</script>
</HEAD> <BODY onload="doi();">
<input id="aaa" type="text" value="1223840.94"/>
</BODY>
</HTML>弹出框的值 有问题!
假如 把 value="1223840.94" 改成 带一位小数的 就没问题!
用parseFloat还是不行
如果改成 alert(i*1000/10000000); 就没问题了!
什么原因啊??
<HEAD>
<script>
function doi()
{
var i = document.getElementById("aaa").value;
/// var i =53643.1;
alert((i/10000));
}
</script>
</HEAD> <BODY onload="doi();">
<input id="aaa" type="text" value="1223840.94"/>
</BODY>
</HTML>弹出框的值 有问题!
假如 把 value="1223840.94" 改成 带一位小数的 就没问题!
用parseFloat还是不行
如果改成 alert(i*1000/10000000); 就没问题了!
什么原因啊??
<script>
function doi()
{
var i = 11456.98
document.write("除以1000结果:"+i/1000);
document.write("<br />");
document.write("除以10000结果:"+i/10000);
}
</script>结果是如下:
除以1000结果:11.45698
除以10000结果:1.1456979999999998请高手们说说原因!
除以10000结果:1.145698 不明白是:浮点数的运算有bug,为什么除以1000结果正常。
而除以10000就不正常了?我跟网上也找到了 解决方法,但是不明白为什么计算不正常?
这是关于精度的问题,当改成带一位小数时,value是float型,结果而如果是两位小数则为double型,问题就出在如果表达中有一个
double类型,结果就会用Double类型表示,除以10000结果:1.1456979999999998就属于这种情况.
下面这个简单的计算将得到 2.000000000000004,而不是 2.0:
var s=0;
for (var i=0; i<20; i++)
s += 0.1
alert(s);
类似的,0.1*26 相乘所产生的结果不等于 0.1 自身加 26 次所得到的结果。
当将浮点数转换成整数时,产生的舍入误差甚至更严重,甚至对于那些”看上去似乎“应该得到整数值的计算,也存在此类问题。例如,下面这些语句:
var d = 29.0 * 0.01;
alert(d);
alert(d * 100);
将得到以下输出:
0.29
28.999999999999996
这可能不是您起初所期望的。
另外,如果想得到制定精度的数值,可以这样用:
如果要保留三位则:Math.round(rs*1000)/1000;
如果要保留四位则:Math.round(rs*10000)/10000;.....以次类推
<script>
//除法函数,用来得到精确的除法结果
//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
//调用:accDiv(arg1,arg2)
//返回值:arg1除以arg2的精确结果
function accDiv(arg1,arg2){
var t1=0,t2=0,r1,r2;
try{t1=arg1.toString().split(".")[1].length}catch(e){}
try{t2=arg2.toString().split(".")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString().replace(".",""))
r2=Number(arg2.toString().replace(".",""))
return (r1/r2)*pow(10,t2-t1);
}
} //给Number类型增加一个div方法,调用起来更加方便。
Number.prototype.div = function (arg){
return accDiv(this, arg);
} function doi()
{
alert(accDiv(678.123,1000));
}
</script>上面是跟网上搜到的浮点除法计算!但是还是解决不了我的问题!
如果将红色的1000改成10000 就有是那种误差的结果。难道对于10000 JS 不会算了?