[Indice]


Visual Basic Script

Funciones numéricas

Funciones de conversión numérica

Las funciones de conversión numérica se utilizan para cambiar el tipo de dato, de una expresión no numérica, a algun tipo numérico, a fin de poder operar metemáticamente con ella. Evidentemente, el resultado de la expresión sólo debe contener números. Si hay letras o signos se producirá un error. No olvides que si hay varias expresiones, que una vez convertidas, serán utilizadas en un cálculo matemático, los tipos de conversión deben ser equivalentes, de lo contrario los resultado son imprevisibles.

CBool(valor)

Convierte un tipo no numérico a tipo Booleano, donde valor debe ser una cadena numérica, un número o una expresión que devuelva un tipo numérico. Si valor vale cero CBool() devuelve False, si es mayor que cero devuelve True y si no es numérico, se producirá un error.

CByte(valor)

Convierte un tipo no numérico a tipo Byte (cuyo rango es de 0 a 255), donde valor debe ser un número, una cadena numérica o una expresión que devuelva un tipo numérico. Si valor es mayor de 255 o no es numérico, CByte() devuelve error.

CCur(valor)

Convierte un tipo no numérico a tipo Currency (cuyo rango va de -922.337.203.685.477,5808 a 922.337.203.685.477,5807), donde valor debe ser un número, una cadena numérica o una expresión que devuelva un tipo numérico.

CDbl(valor)

Convierte un tipo no numérico a tipo Double (número de precisión doble y punto flotante), donde valor debe ser un número, una cadena numérica o una expresión que devuelva un tipo numérico.

CLng(valor)

Convierte un tipo no numérico a tipo Long (entre -2.147.483.648 y 2.147.483.647), donde valor debe ser un número, una cadena numérica o una expresión que devuelva un tipo numérico. CLng() se diferencia de las funciones Fix() e Int() en que redondea, en lugar de truncar, la parte decimal de un número. Cuando la parte decimal es exactamente 0,5, la función CLng() siempre redondea al número par más cercano. Por ejemplo: 0,5 se redondea a 0 y 1,5 se redondea a 2.

CInt(valor)

Convierte un tipo no numérico a tipo Integer (entre -32.768 a 32.767), donde valor debe ser un número, una cadena numérica o una expresión que devuelva un tipo numérico. Al igual que la anterior, CInt() se diferencia de las funciones Fix() e Int() en que redondea, en lugar de truncar, la parte decimal de un número. También redondea de la misma forma que CLng().

Funciones trigonométricas

Todas las funciones trigonométricas trabajan con el argumento en radianes. Recuerda que para convertir grados en radianes hay que multiplicar los grados por (pi/180) y para convertir radianes en grados, multiplicar los radianes por (180/pi). Otro recordatorio: el número pi vale aproximadamente 3,1415926535...

Sin(ángulo)

Devuelve el seno de un ángulo, medido en radianes, que expresa el argumento ángulo, que es obligatorio, y que debe ser un número o una expresión que devuelva un tipo numérico.

El seno de un ángulo es la razón de dos lados de un triángulo rectángulo. Dicho de otro modo, la razón es la longitud del cateto opuesto al ángulo dividida por la longitud de la hipotenusa. El resultado está dentro del intervalo -1 a 1.

Cos(ángulo)

Devuelve el coseno de un ángulo, medido en radianes, que expresa el argumento ángulo, que es obligatorio, y que debe ser un número o una expresión que devuelva un tipo numérico.

El coseno de un ángulo es la razón de dos lados de un triángulo rectángulo. Dicho de otro modo, la razón es la longitud del cateto adyacente al ángulo dividida por la longitud de la hipotenusa. El resultado está dentro del intervalo -1 a 1.

Tan(ángulo)

Devuelve la tangente de un ángulo, medido en radianes, que expresa el argumento ángulo, que es obligatorio, y que debe ser un número o una expresión que devuelva un tipo numérico.

La tangente de un ángulo es la razón de dos lados de un triángulo rectángulo. Dicho de otro modo, la razón es la longitud del cateto opuesto al ángulo, dividida por la longitud del cateto adyacente al ángulo

Atn(número)

Devuelve el arco tangente de un número, que expresa el argumento número, que es obligatorio, y que debe ser un número o una expresión que devuelva un tipo numérico.

Esta función obtiene la razón entre los dos catetos de un triángulo rectángulo y devuelve el ángulo correspondiente en radianes. La razón es la longitud del lado opuesto al ángulo dividida por la longitud del lado adyacente al mismo. El resultado está entre (-pi/2) y (pi/2) radianes.

Con las funciones trigonométricas intrínsecas vistas hasta aquí, y algunas que se exponen más abajo, se pueden construir otras funciones:

Funciones no intrínsecas Equaciones basadas en funciones intrínsecas
Secante Sec(X) = 1 / Cos(X)
Cosecante Cosec(X) = 1 / Sin(X)
Cotangente Cotan(X) = 1 / Tan(X)
Seno inverso Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Coseno inverso Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Secante inversa Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) -1) * (2 * Atn(1))
Cosecante inversa Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))
Cotangente inversa Arccotan(X) = Atn(X) + 2 * Atn(1)
Seno hiperbólico HSin(X) = (Exp(X) - Exp(-X)) / 2
Coseno hiperbólico HCos(X) = (Exp(X) + Exp(-X)) / 2
Tangente hiperbólica HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
Secante hiperbólica HSec(X) = 2 / (Exp(X) + Exp(-X))
Cosecante hiperbólica HCosec(X) = 2 / (Exp(X) - Exp(-X))
Cotangente hiperbólica HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
Seno hiperbólico inverso HArcsin(X) = Log(X + Sqr(X * X + 1))
Coseno hiperbólico inverso HArccos(X) = Log(X + Sqr(X * X - 1))
Tangente hiperbólica inversa HArctan(X) = Log((1 + X) / (1 - X)) / 2
Secante hiperbólica inversa HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Cosecante hiperbólica inversa HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) +1) / X)
Cotangente hiperbólica inversa HArccotan(X) = Log((X + 1) / (X - 1)) / 2

Otras funciones numéricas

Int(valor) - Fix(valor)

Estas dos funciones devuelven el valor entero de un número truncándolo, es decir, que no redondean. La diferencia entre Fix() e Int() es que si valor es negativo, Int() devuelve el primer entero negativo menor o igual a valor, mientras que Fix() devuelve el primer entero negativo mayor o igual a valor. Por ejemplo: Int() convierte -5,4 en -6 y Fix() convierte -5,4 a -5. Si valor contiene Null devuelven Null.

Abs(numero)

Devuelve el valor absoluto de un número o de cualquier expresión numérica. El valor absoluto de un número no tiene signo. Por ejemplo, Abs(-1) y Abs(1) devuelven 1.

Sgn(numero)

Devuelve un entero que indica el signo de un número o de cualquier expresión numérica. Sgn() puede devolver tres valores: Si numero vale 0, devulve 0. Si es mayor que 0 devuelve 1 y si es menor que 0 devuelve -1.

Round(valor[, posiciones_decimales])

Redondea el número contenido en valor, que es obligatorio, y que debe ser un número o una expresión que devuelva un tipo numérico. El argumento [, posiciones_decimales] es opcional. Indica cuántas posiciones decimales a la derecha del punto se van a incluir en el redondeo. Si se omite, la función Round() devuelve un entero.

Sqr(valor)

Devuelve la raiz cuadrada de valor, que es obligatorio, y que debe ser un número o una expresión que devuelva un tipo numérico de valor 0 o mayor que 0.

Log(valor)

Devuelve el logaritmo natural de valor, que es obligatorio, y que debe ser un número o una expresión que devuelva un tipo numérico mayor que 0. El logaritmo natural es el logaritmo en base e. El valor de la constante e es aproximadamente 2.718282.

Utilizando Log() se pueden calcular logaritmos en base-n para cualquier número x, dividiendo el logaritmo natural de x por el logaritmo natural de n. Veamos un ejemplo de función para calcular logaritmos en base 10:

        Function Log10(X)
              Log10 = Log(X) / Log(10)
        End Function
Fíjate en que Log10 es el nombre de nuestra función de ejemplo, y no es lo mismo que Log(10).

Exp(valor)

Devuelve e elevado a una potencia, contenida en valor, que es obligatorio, y que debe ser un número o una expresión que devuelva un tipo numérico, mayor que 0 y menor que 709,78271. El valor de la constante e es aproximadamente 2.718282. La función Exp(), a veces llamada antilogaritmo, complementa la acción de la función Log().

Oct(valor)

Devuelve un string con el valor en Octal de valor, que es obligatorio, y que debe ser un número o una expresión que devuelva un tipo numérico entero. Si tiene parte decimal, será redondeado al entero más cercano antes de obtener su equivalente octal. El máximo valor octal obtenido no puede ser mayor de 11 caracteres octales.

Hex(valor)

Devuelve un string con el valor en Hexadecimal de valor, que es obligatorio, y que debe ser un número o una expresión que devuelva un tipo numérico entero. Si tiene parte decimal, será redondeado al entero más cercano antes de obtener su equivalente hexadecimal. El máximo valor obtenido no puede ser mayor de 8 caracteres hexadecimales.

IsNumeric(expresión)

Devuelve un valor de tipo Booleano que indica si expresión puede ser evaluada como un número. IsNumeric() devuelve True si la expresión completa se reconoce como un número, en caso contrario, devuelve False. También devuelve False si la expresión es una fecha.

Rnd([N])

Genera un número aleatorio partiendo de N, que es opcional.

Rnd devuelve un valor menor que 1 y mayor o igual que 0, por lo que si se quieren obtener números enteros mayores que 1 hay que hacer algunas operaciones.

Por ejemplo, si se utiliza Rnd de forma simple:

<%
  Randomize
  For x = 0 To 5
    Response.Write(Rnd() & "<BR>")
  Next
%>

Se obtiene algo así:

0,2860071
0,4326702
0,959905
0,9140284
0,1316752

Si se quieren obtener números enteros dentro de un cierto intervalo puede utilizarse una expresión:

Int((N_mayor - N_menor + 1) * Rnd + N_menor)

Por ejemplo para obtener una secuencia aleatoria entre 1 y 5:

<%
  Randomize
  For x = 0 To 5
    Response.Write(Int((5 - 1 + 1) * Rnd + 1) & "<BR>")
  Next
%>

Y este podría ser el resultado:

5
4
5
2
1

Te preguntarás de dónde ha salido y para qué sirve la instrucción Randomize[n] que aparece antes del bucle For..To..Next de cada ejemplo; pues se utiliza para inicializar el generador de números aleatorios.

En efecto, la instrucción Randomize[n] utiliza [n] (opcional) para inicializar el generador de números aleatorios de la función Rnd(), asignándole un nuevo valor de inicialización. Si se omite [n], se usará para este fin el valor devuelto por el reloj del sistema.

Si no se utiliza la instrucción Randomize, la función Rnd() (sin argumento) utiliza como valor de inicialización el mismo que utilizó la primera vez que se la invoca, por lo que repetirá la misma secuencia.

FormatNumber(Expresión [, Decimales, [Ceros, [Negativos, [Grupos]]]])

Sirve para dar formato a un número o expresión numérica. El resultado de FormatNumber() sigue siendo de tipo numérico. Tiene los siguientes parámetros:

Expresión Obligatorio. Es el valor que se pretende formatear. Por supuesto, tiene que ser un número o una expresión que devuelva un tipo numérico
Decimales Opcional. Valor numérico que indica cuantas posiciones se muestran a la derecha del signo decimal. Si se omite, por defecto se aplica -1, y se utilizan los valores de la configuración regional del servidor. Si Decimales es menor que el número de dígitos existente, se aplica redondeo,
Ceros Opcional. Indica si se muestran o no los ceros a la izquierda en los valores fraccionarios. Puede tener dos valores: 0 (por defecto) para no mostrarlos, y -1 para mostrarlos.
Negativos Opcional. Indica si se muestran entre paréntesis los valores negativos. Puede tener dos valores: 0 (por defecto) para no mostrarlos, y -1 para mostrarlos.
Grupos Opcional. Indica si se agrupan o no los números utilizando el delimitador de grupos especificado en el panel de control del servidor. Puede tener dos valores: 0 (por defecto) para no agruparlos, y -1 para agruparlos.

Por ejemplo, al escribir:

<%
Response.Write(0012345.1299 & "<BR>")
Response.Write(FormatNumber(0012345.1299, 3, 0, 0, 0) & "<BR>")
Response.Write(FormatNumber(0.1299, 3, 0, 0, 0) & "<BR>")
Response.Write(FormatNumber(0.1299, 3, -1, 0, 0) & "<BR>")
Response.Write(FormatNumber(-0.1299, 3, -1, 0, 0) & "<BR>")
Response.Write(FormatNumber(-0.1299, 3, -1, -1, 0) & "<BR>")
%>

Se obtiene:

12345,1299
12345,130
,130
0,130
-0,130
(0,130)

FormatPercent(Expresión [, Decimales, [Ceros, [Negativos, [Grupos]]]])

Es muy similar a la anterior. Sirve para dar formato a un número o expresión numérica, y además lo multiplica por 100, añadiéndole a la derecha el signo del tanto por ciento (%). El resultado de FormatPercent() NO es de tipo numérico. Tiene los mismos parámetros que FormatNumber().

Por ejemplo, si se escribe:

<%
Response.Write(0012345.1299 & "<BR>")
Response.Write(FormatNumber(0012345.129999, 3, 0, 0, 0) & "<BR>")
Response.Write(FormatNumber(0.129999, 3, 0, 0, 0) & "<BR>")
Response.Write(FormatNumber(0.129999, 3, -1, 0, 0) & "<BR>")
Response.Write(FormatNumber(-0.129999, 3, -1, 0, 0) & "<BR>")
Response.Write(FormatNumber(-0.129999, 3, -1, -1, 0) & "<BR>")
%>

Se obtiene:

12345,129999
1234513,000%
13,000%
13,000%
-13,000%
(13,000%)


[Indice]