做一个四舍五如的函数:
<script>
function ForamtNumber(num,dig)
{
return Math.round(parseFloat(num)*Math.pow(10,dig))/Math.pow(10,dig);}alert(FormatNumber(netRate,1));</script>
<script>
function ForamtNumber(num,dig)
{
return Math.round(parseFloat(num)*Math.pow(10,dig))/Math.pow(10,dig);}alert(FormatNumber(netRate,1));</script>
toFixed不能乱用
参考 http://dev.csdn.net/article/26/26293.shtm
//格式化输出数据,相当于ASP的FormatNumber()函数
//srcStr:需要格式化的数据;nAfterDot:小数位数
//直接截取,不舍
//============================================================================
function FormatNumber(srcStr,nAfterDot)
{
//var pLen=parseInt(nAfterDot);
//return Math.round(parseFloat(srcStr)*Math.pow(10,pLen))/Math.pow(10,pLen);
var srcStr,nAfterDot;
var resultStr,nTen;
srcStr = ""+srcStr+"";
strLen = srcStr.length;
dotPos = srcStr.indexOf(".",0);
if (dotPos == -1){
resultStr = srcStr+".";
for (i=0;i<nAfterDot;i++){
resultStr = resultStr+"0";
}
return resultStr;
}
else{
if ((strLen - dotPos - 1) >= nAfterDot){
nAfter = dotPos + nAfterDot + 1;
nTen =1;
for(j=0;j<nAfterDot;j++){
nTen = nTen*10;
}
resultStr = Math.round(parseFloat(srcStr)*nTen)/nTen;
return resultStr;
}
else{
resultStr = srcStr;
for (i=0;i<(nAfterDot - strLen + dotPos + 1);i++){
resultStr = resultStr+"0";
}
return resultStr;
}
}
}
这些都没问题;看来大家没有自己去试一试。
大家都没抓住问题的关键:
且看以下代码,
<script>
netRate = 0.278*100;
alert("netRate*100 = " + netRate);
</script>
理论上netRate应该是27.8是吗?但其实显示是27.800000000000004(至少我这机器是)
这是为什么?有谁能解释吗?
错,是0.099999999999999999
不信你试试!
但是0.03或0.07却正确
如果这样那我想做个步长是0.01的从0.01到1的for循环的话不是糟透了,每次还要四舍五入不成?
从0.001 到 0.999 检出258个数有这种现象;
其中有的甚至连
value = i*Math.pow(10,-3);
算法也没折
各位试试!<script>
function show_bug(float_num,pow_n){
return float_num * Math.pow(10,pow_n);
}//test form 0.001 to 0.999
var count=0;
var value;
for(var i=1 ; i<1000 ; i++){
value = i*Math.pow(10,-3); //此步有的也无法转化
var buff_str = show_bug(value,2).toString();
if(buff_str.length>4){
document.write(value + " * 1.0E2 = " + buff_str + " <font color=red>error!</font><br>");
count++;
}else{
document.write(value + " * 1.0E2 = " + buff_str + "<br>");
}
}
document.write("总出错数:" + count + "<br>");
</script>
有人能释疑吗?