<SCRIPT LANGUAGE="JavaScript">
<!--
function format( str )
{
var inNumber = false;
var startPos = false;
var res  = [];
for( i=0; i<str.length; i++ )
{
var chr = str.charAt(i);
//在数字里
if( inNumber )
{
for(;;) //处理数字
{
//超出结尾时退出
if( i >= str.length )
break; chr = str.charAt(i);
if( !/^[\d\.]$/.test(chr) ) //不是数字了,跳出循环
{
num = str.substring( startPos, i ); //取得该数字
num = parseFloat(num).toFixed(); //取整
res.push( num ); //加入结果集 //重新计算
startPos = null;
inNumber = false;
i--;
break;
}
else
i++;
}
}
//数字的起点
else if( /^\d$/.test(chr) || chr=="-" )
{
inNumber = true;
startPos = i;
}
//是字母,保留
else if( /^[a-zA-Z]$/.test(chr) )
{
//alert(chr);
res.push( chr );
}
//是分隔符,跳过
else
{
continue;
}
}
return res.join(" ");
}var str = "M3.3,11.7L12.051,58.25c0,0,10.4-26.1,21.1,0.9S22.1,45.7,8.2,29.1S3.3,11.7,3.3,11.7 z";document.write(format(str));
//-->
</SCRIPT>

解决方案 »

  1.   

    四舍五入的时候使用toFixed有些误差,0.9被舍成0, 
    修改了一下算法,将取整的部分改成下面的
    num = parseInt((parseFloat(num)+0.5)); //取整
    这样应该可以了
      

  2.   

    还有点bug,少了对负数的处理
    改成下面的 
    fix = num.indexOf("-") == -1 ? 0.5 : -0.5;
    num = parseInt(parseFloat(num)+ fix); //取整
      

  3.   

    //我的写法很傻,针对某些字符了,哈哈,
    function initSvgNum(d)
    { var strSvg="",temp="";
    var i=d.length;
    for(var loop=0;loop<i;loop++)
    {
    temp=d.charAt(loop);

    if(temp==' '||temp==','||temp=='S'||temp=='s'||temp=='C'||temp=='c'||temp=='Z'||temp=='z'||temp=='M'||temp=='m'||temp=='H'||temp=='h'||temp=='V'||temp=='v'||temp=='L'||temp=='l')
    // strSvg+=loop+"#";
    strSvg+=" "+temp+" ";
    else

    strSvg+=temp;


    }
    //去除最后一个空格
    i=strSvg.length;
    if(strSvg.charAt(i-1)==' ')
    strSvg=strSvg.substring(0,i-1);

    //去除首个字母符号
    if(strSvg.charAt(0)==" ")
    strSvg=strSvg.substring(1,strSvg.length);

    //把【-】号作为一个单体处理
    strSvg=strSvg.replace(/\-/g," -");


    //去除【,】,方便分组
    strSvg=strSvg.replace(/\,/g,"");

    //双空格去除处理
    strSvg=strSvg.replace(/\  /g," ");

    //去除所有的小数
    var str=strSvg.split(" "); var i=str.length; for(var loop=0;loop<i;loop++)
    {
    if(!isNaN(str[loop]))
    {
    //是数字
    str[loop]=Math.round(str[loop]);
    }

    }
    /*
    strSvg="";
    //重新组合
    for(var loop=0;loop<i;loop++)
    {
    strSvg+=str[loop]+" ";
    }
    */
    //结果返回
    return str;}