function truncate(x,nplaces)
{
var zstr;
var xstr= x+"";
var i,j;

i=xstr.indexOf(".");
j=xstr.length;
if ((i<1)||(i>j-2)) zstr=xstr.substring(0,j);
else
zstr=xstr.substring(0,i+nplaces+1);
return zstr;

}

function truncsig(x,nplaces)
{
var xstr= x+"";
var i,j,k,el,m;
var ss;
var xx;
var zstr,backstr,chopstr,delta;
var storestr,storestr1,storestr2,storestr3;

m=xstr.indexOf("e");
if (m!=-1) zstr=float2exp(x,nplaces); // could find it as an 00e00 format
else  //could not find it as 00e00 format so place it into such a format
	{
	i=xstr.indexOf(".");
	if (i==-1) // doesnt exist so backpad with 0 and .
		{
		backstr="";
		for (j=0;j<nplaces;++j)
			backstr=backstr+"0";
		zstr=xstr+"."+backstr;
		i=zstr.indexOf(".");
		}
	else
		zstr= xstr;
	storestr=zstr;

	el=0;
// find the first nonzero and not . or - character
// make this equal to el
	for (k=0;k<zstr.length;++k)
		{
		if ((zstr.substring(k,k+1)!='.')&&(zstr.substring(k,k+1)!='0')&&(zstr.substring(k,k+1)!='-'))
			{	
			el=k;
			k=zstr.length;
			}
		}

	if (zstr.length<el+nplaces+1)// does this add the trailing zero?
		{
		backstr="";
		for (j=0;j<(i+nplaces+1-zstr.length);++j)
			backstr=backstr+"0";
		zstr=zstr+backstr;
		}
	if ((i>el)&&(i<el+nplaces+1))
		{
		chopstr=zstr.substring(0,el+nplaces+1);
		}
	else
		{
		chopstr=zstr.substring(0,el+nplaces);
		}

	if (el+nplaces<i)
		{
		backstr="";
		for (j=el+nplaces;j<i;++j)
			backstr=backstr+"0";
		zstr=chopstr+backstr+".";
		}
	else zstr=chopstr;
	}

return zstr;

}

function float2exp(x,nplaces)
{
var xstr,ystr,zstr;
var i,j;
var y,z,y1,y2;
var delta,delta2;
var ss;

ss=1;
if (x<0) 
	{
	ss=-1;
	x=x*-1;
	}

for (i=-99;i<100;++i)
	{
	if ( (x>=1.0*Math.pow(10,i) )&&(x<1.0*Math.pow(10,i+1) ) )
	break;
	}

z=x/Math.pow(10,i);
y=truncsig(z,nplaces);
// 0.0 Addition
if (x==0.0)
	{
	z=0.0;
	y=truncsig(z,nplaces);
	i=0;
	}
// End of 0.0 addition
delta2=1.0*truncsig(z,nplaces)-1.0*truncsig(z,nplaces-1);
delta2=delta2*Math.pow(10,nplaces-1);
delta2=Math.floor(delta2);
delta2=delta2%2;
y1=truncsig(z,nplaces+2);

delta=(y1-y)*Math.pow(10,nplaces+1);
delta=Math.round(delta);
if ((delta>50)||((delta==50)&&(delta2==1))) 
	y=1.0*y+1.5/Math.pow(10,nplaces-1);

y=y*ss;
ystr=truncsig(y,nplaces);

if (i>=0)
	xstr=ystr+"e+"+i;
else
	xstr=ystr+"e"+i;


return xstr;
}
function roundit(x,nplaces)
{
var round1;
var xstr,ystr;
var small,usualstr,placestr,dotplace;
var i,j,k;

small=x;

xstr=x+"";
round1=float2exp(xstr,nplaces);
ystr=round1+"";
xstr=truncsig(ystr,nplaces);

// Now handle the few special cases near 0.01 to 10
if (small<0)
	nsign=-1.0;
else
	nsign=1.0;

if ( ((xstr>=0.1)&&(xstr<1.00)) ||((xstr<=-0.1)&&(xstr>-1.0)) )
	{
	i=xstr.indexOf("e");
	dotplace=xstr.indexOf(".");
	leftstr="0."+xstr.substring(0,1)+xstr.substring(dotplace+1,i);
	if (nsign<0)
		leftstr="-0."+xstr.substring(1,2)+xstr.substring(dotplace+1,i);
	xstr=leftstr;

	}

if ( ((xstr>=0.01)&&(xstr<0.1)) || ((xstr<=-0.01)&&(xstr>-0.1)) )
	{
	i=xstr.indexOf("e");
	dotplace=xstr.indexOf(".");
	leftstr="0.0"+xstr.substring(0,1)+xstr.substring(dotplace+1,i);
	if (nsign<0)
		leftstr="-0.0"+xstr.substring(1,2)+xstr.substring(dotplace+1,i);
	xstr=leftstr;

	}

if ( ((xstr>=1.00)&&(xstr<10.00)) ||(xstr<=-1.00)&&(xstr>-10.0) )
	{
	i=xstr.indexOf("e");
	leftstr=xstr.substring(0,i);
	xstr=leftstr;
	}

if ( ((xstr>=10.00)&&(xstr<100.00)) ||(xstr<=-10.00)&&(xstr>-100.0) )
	{
	i=xstr.indexOf("e");
	j=xstr.indexOf(".");
	leftstr=xstr.substring(0,j)+xstr.substring(j+1,j+2)+"."+xstr.substring(j+2,i);
	xstr=leftstr;
	}
if ( ((xstr>=100.00)&&(xstr<1000.00)) ||(xstr<=-100.00)&&(xstr>-1000.0) )
	{
	i=xstr.indexOf("e");
	j=xstr.indexOf(".");
	leftstr=xstr.substring(0,j)+xstr.substring(j+1,j+3)+"."+xstr.substring(j+3,i);
	xstr=leftstr;
	}

return xstr;
}
