Búsqueda en el Foro:
Buscar


Autor Mensaje
Mensaje06-07-2009, 13:43 (UTC)    
Título del mensaje: [Código Javascript] Euroconversor

Este fantástico script realiza las conversiones monetarias entre las monedas de la zona Euro, el Euro y el dólar americano de forma automática. Basta con introducir el valor en cualquiera de las monedas, y automáticamente se actualizan los contravalores en las restantes.

Para el calculo del cambio con el dólar estadounidense se requiere introducir la razón de cambio USD/euro. Si no se indica, el script toma un valor por defecto, correspondiente al cambio aplicado el día 23/11/2001. Por otra parte, si el navegador no soporta JavaScript, se visualizan los tipos de cambio manejados, aunque obviamente no se podrán realizan los cambios.

Realmente útil, este conversor es un ejemplo del uso de formularios con JavaScript, y de las posibilidades de cálculo de este lenguaje.

Página personal del autor:
www.dhs.sitio.net


Código:
Este es es el código Javascript:
Código:
<script language="javascript" type="text/javascript">
/* Noviembre 2001, David Hernández Sanz
   http://www.terra.es/personal3/davidhdezsanz/
   Realiza cambios monetarios entre las monedas nacionales de los paises de la
   "zona euro" y el euro y el dolar estadounidense (US$). Al cambiar el valor de
   cualquier moneda, se calculan las cantidades equivalentes en el resto.
   Para el calculo del cambio con el dolar estadounidense se requiere introducir
   la razon de cambio US$/euro. Si esta no se indica se toma un valor por defecto.
   Si el navegador no admite scripts, se visualizan los tipos de cambio manejados
   pero no se realizan cambios.
*/
//Este script y otros muchos pueden
//descarse on-line de forma gratuita
//en El Código: www.elcodigo.com

                                       // DECLARACION DE FUNCIONES
// function euroconversor(mon, form)      JS1.1;
// function vacio(cadena)                 JS1.0; euroconversor
// function normalizar(formato_ant)       JS1.0; euroconversor
// function cambiar(cambios, inf, sup, euros, formato, form)
//                                        JS1.1; euroconversor
                                       // DECLARACION DE CONSTANTES
var cambio_dolar = 0.8770;             // cambio US$/euro
var cambio_dolar_fecha = "23/11/2001";
                                       // DECLARACION DE VARIABLES GLOBALES
var valor;                             // valor de la moneda a cambiar
var error;                             // error o no

/* convierte mon al resto, en form                                           */
function euroconversor(mon, form)
  {                                    // DECLARACION DE VARIABLES
    cambios = [1.0,                    // cambios monetarios x/euro; euro
               cambio_dolar,           // US$
               1.95583,                // marcos alemanes
               13.7603,                // chelines austriacos
               40.3399,                // francos belgas
               166.386,                // pesetas espanolas
               5.94573,                // marcos finlandeses
               6.55957,                // francos franceses
               340.75,                 // dracmas griegos
               2.20371,                // florines holandeses
               0.787564,               // libras irlandesas
               1936.27,                // liras italianas
               40.3399,                // francos luxemburgueses
               200.482];               // escudos portugueses
    var valor_euros;                   // cantidad de mon en euros
    var formato;                       // formato (¿?, 0; 1,1, 1; 1.0, 2)
    var decimal;                       // punto decimal segun formato
    valor = form.dolar.value;          // INICIO
    if(!vacio(valor))
      {
        formato = normalizar(0);       // normaliza form.dolar
        if(isNaN(valor))
          alert("El cambio US$/euro no es un número correcto.\n" +
                "Debe estar en la forma 1552,95 o 1552.95.\n" +
                "Se tomará el valor " + cambios[1] + " US$/euro por defecto " +
                "(" + cambio_dolar_fecha + ").");
        else
          cambios[1] = valor;
      }
    else
      formato = 0;
    decimal = formato == 1 ? ',' : '.';
    valor = form.moneda[mon].value;    // normaliza form.moneda[mon]
    if(vacio(valor))
      alert("No hay cantidad a cambiar.");
    else
      {
        formato = normalizar(formato);
        if(isNaN(valor))
          alert("La moneda no es un número correcto.\n" +
                "Debe estar en la forma 1552,95 o 1552.95.");
        else
          if(error)
            alert("La moneda no está en la misma forma que el valor " +
                  "US$/euro.\n" +
                  "Debe estar en la forma 1552" + decimal + "95.");
          else
            {
              if(mon == 0)             // cambia a euros
                valor_euros = valor;   // cambios[0] = 1.0
              else
                valor_euros = valor / cambios[mon];
              cambiar(cambios, 0, mon, valor_euros, formato, form);
              cambiar(cambios, mon + 1, cambios.length, valor_euros, formato,
                      form);
            }
      }
  }

/* dice si cadena es texto no vacio o no                                     */
function vacio(cadena)
  {                                    // DECLARACION DE CONSTANTES
    var blanco = " \n\r\t";            // blancos (SP, LF, CR, TAB)
                                       // DECLARACION DE VARIABLES
    var i;                             // indice en cadena
    var es_vacio;                      // cadena es vacio o no
    for(i = 0, es_vacio = true; (i < cadena.length) && es_vacio; i++) // INICIO
      es_vacio = blanco.indexOf(cadena.charAt(i)) != - 1;
    return(es_vacio);
  }

/* escribe valor en forma inglesa (1552,95 -> 1552.95) y dice la forma ori-  */
/* ginal, segun sea el formato_ant                                           */
function normalizar(formato_ant)
  {                                    // DECLARACION-INICIALIZACION VARIABLES
    var formato_act = 0;               // formato actual (¿?, 1,1, 1.0)
    var coma = valor.indexOf(',');     // indice de ',' en valor
    var punto = valor.indexOf('.');    // indice de '.' en valor
    if((coma == -1) && (punto == -1))  // INICIO
      {                                // valor 9999
        formato_act = formato_ant;
        error = false;
      }
    else
      if(coma != -1)                   // valor 9999,99
        {
          formato_act = 1;
          error = formato_ant == 2;
        }
      else                             // punto; valor 9999.99
        {
          formato_act = 2;
          error = formato_ant == 1;
        }
    if((formato_act == 1) && (coma != -1)) // pasa a formato ingles
      valor = valor.substring(0, coma) + '.' +
              valor.substring(coma + 1, valor.length);
    return(formato_act);
  }

/* cambia euros a monedas [inf, sup],  desnormaliza segun formato y copia en */
/* form                                                                      */
function cambiar(cambios, inf, sup, euros, formato, form)
  {                                    // DECLARACION DE VARIABLES
    var i;                             // indice en form.monedas
    var valor_x;                       // valor de moneda x
    var punto;                         // indice de '.' en valor_x
    for(i = inf; i < sup; i++)         // INICIO
      {                                // cambia
        valor_x = euros * cambios[i];
        valor_x = valor_x.toString();
        if(formato == 1)               // desnormaliza
          {
            punto = valor_x.indexOf('.');
            if(punto != -1)
              valor_x = valor_x.substring(0, punto) + ',' +
                        valor_x.substring(punto + 1, valor_x.length);
          }
        form.moneda[i].value = valor_x; // copia en form
      }
  }
 




</script>


Y este en HTML que se necesita para que se visualize el "formulario":
Código:

<div align="center">
<table><tr><td class="buscador">
<p>
<form>
  Introduce el cambio actual US$/¤:<br>
  <input type="text" name="dolar" size="20"><br><br>

  Introduce el valor en ¤ o US$ a convertir y pulsa enter:<br>
  <input type="text" name="moneda" value="" size="20" onchange="javascript:euroconversor(0, this.form);">¤<br>
  <input type="text" name="moneda" value="" size="20" onchange="javascript:euroconversor(1, this.form);">US$<br><br>
 
  Resultado de la conversión:<br>
  <input type="text" name="moneda" value="1,95583" size="20" onchange="javascript:euroconversor(2, this.form);"> Marcos alemanes<br>
  <input type="text" name="moneda" value="13,7603" size="20" onchange="javascript:euroconversor(3, this.form);"> Chelines austriacos<br>
  <input type="text" name="moneda" value="40,3399" size="20" onchange="javascript:euroconversor(4, this.form);"> Francos belgas<br>
  <input type="text" name="moneda" value="166,386" size="20" onchange="javascript:euroconversor(5, this.form);"> Pesetas españolas<br>
  <input type="text" name="moneda" value="5,94573" size="20" onchange="javascript:euroconversor(6, this.form);"> Marcos finlandeses<br>
  <input type="text" name="moneda" value="6,55957" size="20" onchange="javascript:euroconversor(7, this.form);"> Francos franceses<br>
  <input type="text" name="moneda" value="340,75" size="20" onchange="javascript:euroconversor(8, this.form);"> Dracmas griegos<br>
  <input type="text" name="moneda" value="2,20371" size="20" onchange="javascript:euroconversor(9, this.form);"> Florines holandeses<br>
  <input type="text" name="moneda" value="0,787564" size="20" onchange="javascript:euroconversor(10, this.form);"> Libras irlandesas<br>
  <input type="text" name="moneda" value="1936,27" size="20" onchange="javascript:euroconversor(11, this.form);"> Liras italianas<br>
  <input type="text" name="moneda" value="40,3399" size="20" onchange="javascript:euroconversor(12, this.form);"> Francos luxemburgueses<br>
  <input type="text" name="moneda" value="200,482" size="20" onchange="javascript:euroconversor(13, this.form);"> Escudos portugueses
</form>
</p>
</td></tr></table>
</div>




Ultima edición por vfcorporation el Sab Sep 05, 2009 3:55 pm; editado 2 veces
Mostrar mensajes anteriores:   


Powered by phpBB © 2001, 2005 phpBB Group