Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/06/2006, 10:38
Avatar de luistar
luistar
 
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 939
Antigüedad: 19 años, 1 mes
Puntos: 0
hola
pues teneís razón, no he encontrado algo como eso entre las funciones o métodos nativos en ActionScript
pero con los métodos matemáticos que posee se puede armar una función de manera sencilla
sólo que me topé con un gran inconveniente cuando me propuse hacerlo:
ActionScript no trabaja bien con decimales, basta con ver este ejemplo:
Código:
var num:Number = 0;
for(var n=0;n<10;n++) num += 0.1;
trace('El valor de num es '+num);
if(numeroA==1)
	trace('El valor de num es 1');
else
	trace('El valor de num NO es 1');
//------------------------>
trace(10.1-10);
lo que me trabó en varios procesos
por ello, hay que trabajarlos a veces como cadenas, un tanto más engorroso
pero finalmente creo que conseguí el comentido
para ello se tuvo que independizar algunos procesos, por cierto podrían resultar últiles en algunas situaciones

este es el código sin comentarios: (espero no tenga falencias xD)
Código:
var rellenarCadena:Function = function(cadena:String,limite:Number,caracteres_relleno:String,posicion:Boolean):String{
	if(cadena.length>=limite) return cadena;
	while(cadena.length<limite) if(posicion) cadena = caracteres_relleno+cadena; else cadena += caracteres_relleno;
	return cadena;
}
var float2dec:Function = function(numero:Number):String{
	var numero_str:String = String(numero);
	if(numero_str.indexOf('e') == -1) return numero_str;
	var posicion_decimal:Number = numero_str.indexOf('.');
	var parte_entera:String = posicion_decimal!=-1?numero_str.split('.')[0]:numero_str.split('e')[0];
	var parte_decimal:String = posicion_decimal!=-1?numero_str.substr(posicion_decimal+1,numero_str.indexOf('e')-posicion_decimal-1):'';
	var exponente:Number = Number(numero_str.split('e')[1]);
	var tmp1:String = exponente>0?parte_decimal:parte_entera;
	var tmp2:String = rellenarCadena(tmp1,Math.abs(exponente)+tmp1.length,'0',exponente<0);
	var tmp3:String = exponente>0?parte_entera+tmp2:tmp2.substr(0,1)+'.'+tmp2.substr(1)+parte_decimal;
	return tmp3;
}
var redondear:Function = function(numero:Number,limit_decimales:Number):Number{
	var numero_str:String = float2dec(numero);
	var posicion_decimal:Number = numero_str.indexOf('.');
	if(posicion_decimal==-1) return numero;
	var parte_decimal:Number = Number(numero_str.substr(posicion_decimal+1));
	var cant_decimales:Number = String(parte_decimal).length;
	if(cant_decimales<=limit_decimales) return numero;
	var tmp1:Number = Math.round(numero*Math.pow(10,limit_decimales));
	var tmp2:Number = tmp1/Math.pow(10,limit_decimales);
	return tmp2;
}

trace("EJEMPLOS: redondear\n----------------------------------------------------");
trace(redondear(12.451654,1));
trace(redondear(45.117214,2));
var numE:Number = 9.5367431640625e-7;
trace(numE+' -> '+redondear(numE,8)+' -> '+float2dec(redondear(numE,8)));
var numF:Number = 9.5367431640625e-3;
trace(numF+' -> '+redondear(numF,5)+' -> '+float2dec(redondear(numF,5)));

stop();
es sólo entender cómo ActionScript interpreta ciertos números
si quieres ver cómo funciona cada función xD
aquí está el código con los comentarios y ejemplos pertinentes, solo copia el contenido en un nuevo doc flash

:D
__________________
Si digo que soy mentiroso. ¿Lo soy?

Última edición por luistar; 01/06/2006 a las 10:44