Convirtiendo Bolivares a Bolivares Fuertes desde Java

El primer post del año y aún recuperandome de los abusos de Diciembre 31. Para ponermela fácil, voy a volver sobre mis pasos del año anrterior y voy a hablarles un poco más sobre la reconversión de Bolivares a Bolivares Fuertes. En este caso no voy a seguir rumiando sobre si es útil o no, sino más bien sobre como podemos hacer la conversión en este caso desde Java (Los detalles concretos sobre como implementar la solución en cualquier lenguaje estan en la página que habla sobre la reconversión).

Note lo siguiente:

  • Este algoritmo sólo sirve para hacer pagos ya que redondea a dos decimales. Cuando se convierte datos historicos se deben usar 3 para poder convertir de vuelta cantidades
  • No me hago responsable de ninguna manera sobre lo que este código puede hacer, viene con licencia GPL (aunque si tiene errores lo limpiaré con mucho gusto).

El código en Java, sn más preambulos:


1 package com.kodegeek.blog.finance.venezuela;
2
3 import java.math.BigDecimal;
4 import java.math.RoundingMode;
5 import java.text.DecimalFormat;
6 import java.text.NumberFormat;
7 import java.util.Locale;
8
9 /**
10 * Class that performs the conversion between "Bolivares"
and "Bolivares Fuertes" using proper rounding
11 * as defined on the following official document: <a
href="http://www.reconversionbcv.org.ve/files/pdf/aspectosnov07.pdf"
>Reconversion BCV</a>
12 * License: GPL
13 * @author josevnz@kodegeek.com
14 */

15 public final class BsF {
16 private static NumberFormat nForm;
17 static {
18 // Set the locale to Venezuela
19 Locale.setDefault(new Locale("es", "VE"));
20 nForm = new DecimalFormat("BsF #.00");
21 }
22
23 private static final BigDecimal FACTOR =
new
BigDecimal(Math.pow(10, 3));
24 private static final double PLACES =
(
double) Math.pow(10, 2);
25
26 public static double bsTobsF(double value) {
27 BigDecimal valScale = new BigDecimal(value);
28 return valScale.divide(FACTOR, 2,
RoundingMode
.HALF_UP).doubleValue();
29 }
30
31 public static double bsFtoBs(double value) {
32 BigDecimal valScale = new BigDecimal(value);
33 return valScale.multiply(FACTOR).doubleValue();
34 }
35
36 public static void main(String [] args) {
37 double value = Double.parseDouble(args[0]);
38 value = bsTobsF(value);
39 System.out.println(nForm.format(value));
40 }
41 }

Menos de 50 lineas de código, incluyendo comentarios y cosas inútiles, todo en menos de 10 minutos (creo que no tiene bugs pero tengo el derecho de equivocarme).

Por cierto, ¿ha jugado con el programa oficial de reconversión en línea? Es horroroso, ya que:

  • No te deja meter la cantidad directamente, en vez de eso tienes que pulsar TODOS los números en la calculadora
  • Te deja especificar Bolivares Fuertes (O bolivares) tanto en la fuente como el destino de la conversión (estupido). Un botón e selección simple soluciona el problema.
  • Está escrita en Flash (OK, no es un bug sino mal gusto 🙂 )

Si me animan quizas ponga una aplicación aqui en el blog, haganmelo saber si están interesados.

Blogalaxia:, , ,
Technorati:, , ,
To2blogs:, , ,
Del.icio.us:, , ,