Ver Mensaje Individual
  #10  
Antiguo 16-05-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Reputación: 27
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por darkerbyte Ver Mensaje
Me podrías explicar un poco mas sobre este método que inventaste. ¿Cómo determinas el valor ficticio? ¿Podrias mostrarnos como lo usabas, por ejemplo para obtener dólares y euros?
Por supuesto que puedo explicarlo mejor. Eso sí, no lo inventé yo ya que no es sino un cambio de unidad, algo parecido a (por ejemplo) pasar de kilómetros a millas.

Verás, primero tenemos una tabla denominada divisa, más o menos así:
Código SQL [-]
CREATE TABLE divisas
  nombre VARCHAR (32),
  simbolo VARCHAR (4),
  valor INTEGER,
  num_decimales INTEGER
Ahora imaginemos que nuestra moneda principal serán los euros. En principio podríamos ponerle el valor "1", pero tiene céntimos así que sería más lógico que fuera "100". Sin embargo hay divisas cuyo valor es inferior al céntimo de euro (como la antigua peseta, por ejemplo) así que le damos el valor "10.000". Pues damos de alta a la divisa:
Código SQL [-]
INSERT INTO divisa (nombre, simbolo, valor, num_decimales)
VALUES ('euro', '€', 10000, 2);
Ahora metemos dólares. Primero, tenemos que saber cuántos euros es un dólar, que según Google, cuando escribo esto es 1U$ = 0'707063565€. Multiplicamos por el valor del euro, esto es, por 10.000, y nos sale 7.071:
Código SQL [-]
INSERT INTO divisa (nombre, simbolo, valor, num_decimales)
VALUES ('dólar estadounidense', 'U$', 7071, 2);
Ahora vamos a por los productos:
Código SQL [-]
CREATE TABLE productos
  nombre VARCHAR (256)
  precio INTEGER;
Como ves, el precio es un entero. Para introducir el precio, pues sólo tenemos que multiplicarlo por el valor de la divisa en la que hayamos introducido el precio:
Código SQL [-]
%VALOR_DIVISA% = SELECT valor FROM divisas WHERE nombre=%DIVISA_SELECCIONADA%;
INSERT INTO productos (nombre, precio)
VALUES ('chocolatina', (1.20 * %VALOR_DIVISA%));
Y ya está. Ahora todos los cálculos los hacemos con enteros, pero cuando mostremos el precio tenemos que dividir por el valor de la divisa y nos dará el precio.

Por ejemplo, nuestra chocolatina:
Código:
En euros:
  12.000 / 10.000 = 1'20€
En dólares:
  12.000 / 7.071 = 1'68U$
Que conste que esto no soluciona completamente el tema del redondeo. Es más, según Google la chocolatina cuesta 1'70U$: dos centavos más.

Espero que haya quedado más claro.

Última edición por Ñuño Martínez fecha: 17-05-2011 a las 10:12:08.
Responder Con Cita