▷ Curso de JAVA: Cómo convertir número decimal a fraccionario y viceversa
En el presente POST abordaremos un tema de suma importancia, y este es el cómo convertir un número decimal a fracción e igualmente un fracción a número decimal, este proceso lo vamos a realizar sobre un clase que ya hemos trabajado en anteriores entradas la cual es la clase fracción, puedes visitar esta entrada si así lo deseas Curso java : Cómo crear la clase fracción.
Explicaremos paso a paso el proceso de conversión de estas cifras recordemos que un número fraccionario siempre tendrá un equivalente decimal y en ocasiones resulta necesario conocerlo, bueno sin mas preámbulos pasemos al proceso de resolución, estar atentos a cada paso que vamos a realizar.
Si aún tienes dudas de cómo crear un proyecto, ventanas JFrame, etc. Te invito a que mires el siguiente POST Curso de JAVA: Cómo hacer un proyecto, un paquete y un formulario?
Explicaremos paso a paso el proceso de conversión de estas cifras recordemos que un número fraccionario siempre tendrá un equivalente decimal y en ocasiones resulta necesario conocerlo, bueno sin mas preámbulos pasemos al proceso de resolución, estar atentos a cada paso que vamos a realizar.
Si aún tienes dudas de cómo crear un proyecto, ventanas JFrame, etc. Te invito a que mires el siguiente POST Curso de JAVA: Cómo hacer un proyecto, un paquete y un formulario?
Convertir decimal a fracción y viceversa |
Explicación por Videotutorial:
PARTE # 1
PARTE # 2
Explicación por Foto-Tutorial:
Antes de comenzar vamos a explicar la distribución de nuestro proyecto el cual lo trabajamos con interfaz gráfica, pero nosotros solo nos vamos a centrar en la creación de los métodos que nos permitirán realizar las respectivas conversiones (Fracción a decimal y decimal a fracción).
1. Tenemos nuestro proyecto java al cual hemos llamado fracciones, está compuesto por un paquete llamado controller; aquí se alojaran las clases que nos permitirán interactuar con la interfaz gráfica y la lógica de nuestra aplicación.
Tenemos un paquete llamado fracciones en este estarán alojados los componentes y clases de la interfaz gráfica, igualmente estará nuestra clase principal para poder iniciar la aplicación.
Por ultimo tenemos el paquete model en el cual se encuentra alojado la clase Fraccion, en esta se manejara la lógica de nuestra aplicación por Ej.: los métodos de conversión que trabajaremos.
Distribución proyecto java |
2. Antes de entrar en materia, vamos a explicar el proceso de conversión de una fracción a decimal y viceversa, para tener una idea clara de lo que vamos hacer, haremos un par de ejercicios para cada caso.
EJEMPLO # 1: Convertir número fraccionario a decimal
El proceso de conversión es muy sencillo, solo bastaría con dividir la parte del numerador entre el denominador; por ejemplo: si tenemos 1/2 al dividir 1 entre 2 el resultado final seria 0.5.
Convertir número fraccionario a decimal java |
El proceso de conversión para este caso será un poco distinto, la explicaremos paso a paso.
*El primer paso, será tomar la parte decimal de la cifra y pasarla a la parte del numerador en la futura fracción.
*El segundo paso, será encontrar el valor del denominador de la futura fracción, en este paso solo vamos a escribir el número 1 del lado del denominador.
*El tercer paso, siguiendo en la parte del denominador de la fracción vamos agregar tantos ceros a la derecha, como la longitud del valor decimal.
Vamos a explicar estos tres pasos con una cifra, para esto tenemos el valor de 0.5
convertir número decimal a fracción |
Primer Paso: Tomamos la parte decimal de nuestra cifra (0.5), en este caso la parte decimal es el 5 pasaremos este número a la parte del numerador de la futura fracción.
convertir número decimal a fracción |
Segundo Paso: En la parte del denominador inicialmente colocaremos el numero 1.
Convertir número decimal a fracción |
Tercer Paso: En la parte del denominador agregaremos tantos ceros a la derecha como la longitud de la parte decimal, la parte decimal de nuestra cifra es de 5, por lo tanto la longitud de este seria de 1, pero si se diera el caso que nuestra cifra decimal fuese de 50, la longitud de este seria de 2 ya que son dos números que lo componen, por lo tanto para este caso la longitud de ceros que se deben agregar es de 1 la cifra final quedaría 10, por ultimo simplificamos la fracción si es necesario y obtendríamos el resultado final, que es 1/2.
Convertir número decimal a fracción |
EJEMPLO # 3: Convertir número decimal a fracción (caso 2)
Tenemos la cifra de 1.5, para la parte decimal (5) repetimos el proceso anterior.
Convertir número decimal a fracción |
Haremos un proceso extra; cuando la parte entera de nuestra cifra decimal es diferente de 0, como en este caso que la parte entera de nuestra cifra (1.5) es 1. Repetimos el proceso de conversión a fracción, pasamos el 1 al numerador y en la parte del denominador iría 1, estas dos fracciones debemos sumarlas y obtener la fracción resultante.
Convertir número decimal a fracción |
Sumamos las fracciones y obtenemos el resultado.
Convertir número decimal a fracción |
3. ¡Entramos en materia! a la clase fraccion.java le agregaremos un método que nos permita realizar la conversión de número fraccionario a decimal, el proceso es bastante sencillo.
Creamos un método de tipo double, el cual nos permitirá convertir una fracción a un número decimal, sabemos que debemos dividir el numerador entre el denominador.
Método toDecimal() java |
Creamos un método tipo int al cual hemos llamado getPuntoDecimal, este recibe un parámetro de tipo String el cual hace referencia a la cifra decimal que ingresemos.
Este método se encargara de obtener la posición en la cual se encuentra el punto decimal por Ej. si tenemos 1.5 al convertir este número a cadena de texto, tendría un longitud de 3 por lo tanto la posición del punto decimal seria la posición 1, recordemos que al trabajar con vectores en java las posiciones del mismo inician desde 0, básicamente este método se encarga de hacer este proceso.
Método getPuntoDecimal() java |
5. Lo siguiente que haremos será crear un método, que nos permita obtener la parte entera de la cifra decimal, por Ej.: si tengo la cifra de 1.5; la parte entera seria 1, en conclusión la parte entera de una cifra decimal es todo aquello que esta antes del punto decimal.
Por lo tanto creamos una función de tipo String, a la cual llamaremos getPartInt y esta nos devolverá una subcadena con la cifra entera resultante, esta función recibe un parámetro de tipo String haciendo referencia a la cifra decimal.
Como podemos observar, para saber cuál es la parte entera de la cifra decimal, hacemos uso del método anterior(getPuntoDecimal) para ubicar el punto de separación(punto decimal).
Método getPartInt java |
6. Creamos otra función muy similar a la anterior, la diferencia es que esta va a obtener la parte decimal de nuestra cifra, por Ej. si tenemos 1.5 la función devolverá solamente la parte decimal que en este caso sería el 5.
Es una función de tipo String a la cual hemos llamado getPartDecimal, igualmente recibe como parámetro una variable tipo String y lo que devolverá será una subcadena en la cual estaría solamente nuestra valor decimal omitiendo la parte entera de la cifra.
Igualmente llamamos al método getPuntoDecimal para obtener el punto de separación y así devolver el valor exacto.
Método getPartDecimal java |
7. Creamos otra función la cual nos permitirá obtener un número de suma importancia para realizar la conversión.
Como vimos en los ejemplos pasados, podemos recordar que si teníamos la cifra por Ej.: 0.5 la parte decimal(5) pasaba al numerador y dependiendo la longitud o la cantidad de números de la parte decimal agregamos cierta cantidad de 0 al denominador, en el caso de 0.5, el valor debería ser 10 pues solo hay un número en la parte decimal, pero si se diera el caso que la cifra fuese 0.50, el valor debería ser 100 y así sucesivamente, esta será la finalidad del método que crearemos a continuación.
El método u función Sera de tipo int llevara el nombre de factorMultiplicador al cual le pasaremos un parámetro de tipo entero, este parámetro hace referencia a la longitud del valor decimal de nuestra cifra.
Creamos un ciclo para (for) donde se agregaran valores a la variable tipo String (factorMultiplicador), al finalizar solo retornamos el valor obtenido que será convertido a tipo de dato entero(int)
Método FactorMultiplicador() java |
8. Crearemos el método final en el cual uniremos todo lo creado hace un momento.
Nuestra función será de tipo Fraccion(haciendo referencia a la clase fraccion.java), recibimos un parámetro de tipo double el cual será el valor decimal que queremos convertir.
*Entrando a la función iniciamos declarando un objeto de tipo Fraccion al cual hemos llamado newFraccion
*Obtendremos la parte entera y decimal de nuestra cifra, para esto hemos creado dos variables de tipo String (partInt, partDecimal) y llamamos los métodos getPatInt y getPartDecimal respectivamente, le pasamos como parámetro nuestra cifra decimal.
*Convertimos a tipo de dato int tanto la parte entera como la parte decimal de nuestra cifra, igualmente obtenemos el factor multiplicador de nuestra cifra decimal.
*Haremos una comparación donde verificamos si la parte entera de nuestra cifra decimal es 0, esto para verificar si hay que realizar el proceso extra que comentamos cuando estábamos resolviendo los ejemplos.
*Si la parte entera es igual a 0 solo bastaría con inicializar nuestro objeto tipo Fracción, el cual llevara en el primer parámetro la variable d (esta contiene la parte decimal de la cifra), en el segundo parámetro le pasaremos la variable factorMultiplicador
*Si la parte entera es diferente de 0, procedemos a crear dos objetos tipo Fracción.
El primero llevara como numerador la parte entera (variable n) de nuestra cifra y en la parte del denominador llevara un 1.
El segundo objeto llevara como numerador la parte decimal (variable d) de nuestra cifra y en la parte del denominador llevara la variable factorMultiplicador.
Para finalizar al objeto newFraccion le asignaremos la suma de la fracción 1 (f1) más fracción 2 (f2).
Método toFraccion java |
9. Para llamar los métodos creados solo debemos escribir las siguientes líneas de código en el método main.
Método Main Java |
El resultado final seria:
Método Main java |
La clase fracción quedaría de la siguiente manera
package model;
public class Fraccion {
private int numerador;
private int denominador;
public Fraccion(){
this.numerador=0;
this.denominador=0;
}
/*Metodo constructor de la clase, recibe dos parametros (numerador, denominador)*/
public Fraccion(int numerador, int denominador) {
if (denominador != 0) {
this.numerador = numerador;
this.denominador = denominador;
}
}
/*Metodos get y set */
public int getNumerador() {
return numerador;
}
public void setNumerador(int numerador) {
this.numerador = numerador;
}
public int getDenominador() {
return denominador;
}
public void setDenominador(int denominador) {
this.denominador = denominador;
}
/*Operaciones Basicas: SUMA, RESTA, MULTIPLICACION Y DIVISION*/
public Fraccion sumar(Fraccion f){
return new Fraccion(f.getNumerador() * getDenominador() + f.getDenominador() * getNumerador(), f.getDenominador() * getDenominador());
}
public Fraccion restar(Fraccion f) {
return new Fraccion((getNumerador() * f.getDenominador()) - (getDenominador() * f.getNumerador()), f.getDenominador() * getDenominador());
}
public Fraccion multiplicar(Fraccion f) {
return new Fraccion(f.getNumerador() * getNumerador() , f.getDenominador() * getDenominador());
}
public Fraccion dividir(Fraccion f) {
return new Fraccion(getNumerador() * f.getDenominador(), f.getNumerador() * getDenominador());
}
/*Metodos para simplificar la Fraccion resultante */
private int mcd(Fraccion f){
int aux_num , aux_den, mcd ;
int num = f.getNumerador();
int den = f.getDenominador();
if(num != 0){
if(num < 0){
num = -1*num;
}
if(den < 0){
den = -1*den;
}
if(num > den){
aux_num = num;
aux_den = den;
}else{
aux_num = den;
aux_den = num;
}
mcd = aux_den;
while(aux_den != 0){
mcd = aux_den;
aux_den = aux_num % aux_den;
aux_num = mcd;
}
}else{
mcd = 1;
}
return mcd;
}
private Fraccion simplificar(Fraccion f) {
int num = mcd(f);
f.setNumerador(f.getNumerador() / num);
f.setDenominador(f.getDenominador() / num);
if(f.getNumerador()<0 && f.getDenominador()<0){
f.setNumerador(-1 * f.getNumerador());
f.setDenominador(-1 * f.getDenominador());
}else if(f.getNumerador() > -1 && f.getDenominador() < 0){
f.setNumerador(-1 * f.getNumerador());
f.setDenominador(-1 * f.getDenominador());
}
return f;
}
public double toDecimal(){
return (double) this.getNumerador() / (double) this.getDenominador();
}
public Fraccion toFraccion(double decimal){
Fraccion newFraccion;
String partInt = getPartInt(String.valueOf(decimal));
String partDecimal = getPartDecimal(String.valueOf(decimal));
int n = Integer.parseInt(partInt);
int d = Integer.parseInt(partDecimal);
int factorMultiplicador = factorMultiplicador(partDecimal.length());
if(n==0){
newFraccion = new Fraccion(d, factorMultiplicador);
}else{
Fraccion f1 = new Fraccion(n, 1);
Fraccion f2 = new Fraccion(d, factorMultiplicador);
newFraccion = f1.sumar(f2);
}
return newFraccion;
}
private String getPartInt(String val){
int i = getPuntoDecimal(val);
return val.substring(0, i);
}
private String getPartDecimal(String val){
int i=getPuntoDecimal(val);
return val.substring(i+1, val.length());
}
private int getPuntoDecimal(String val){
int i=0;
while(val.charAt(i)!='.'){
i++;
if(i==val.length()){
break;
}
}
return i;
}
private int factorMultiplicador(int longitud){
String factorMultiplicador="1";
for(int i=0; i<longitud; i++){
factorMultiplicador=factorMultiplicador+"0";
}
return Integer.parseInt(factorMultiplicador);
}
/*Funcion toString para devolver el resultado obtenido de las operaciones*/
@Override
public String toString(){
if(this.getNumerador()!=0 && this.getDenominador()!=0){
simplificar(this);
if(this.getDenominador()==1){
return String.valueOf(getNumerador());
}else{
return getNumerador()+ "/" + getDenominador();
}
}else{
return "El denominador debe ser distinto de 0";
}
}
}
Con esto hemos concluido con el desarrollo de nuestro proyecto, te invitamos a seguir viendo otros temas interesantes y seguir obteniendo conocimientos acerca de este amplio mundo del desarrollo de software.
Espero este tutorial te haya sido de gran ayuda y pronto estaremos tratando otros temas interesantes.
Si tienes alguna otra forma de implementar esta ejemplo no dudes en compartirla, y así poder compartir opiniones sobre el tema.
Si deseas descargar el código fuente del presente tema, sólo debes dirigirte a nuestra Zona de Descargas, y dar clic sobre el icono "Curso de JAVA Parte 25".
Si deseas descargar el código fuente del presente tema, sólo debes dirigirte a nuestra Zona de Descargas, y dar clic sobre el icono "Curso de JAVA Parte 25".
¿Quieres aprender a realizar aún más cosas y personalizar tus programas hechos en el lenguaje de programación JAVA?, si tu respuesta es "Sí", puedes acceder a todos los tips de JAVA que hemos estado publicando en este blog, dando clic aquí.
Suscríbete a nuestro blog, vía Email o RSS; además puedes seguirnos a través de nuestras redes sociales como: Facebook, Twitter, YouTube y Google+.
Si te fue de gran ayuda este material, no olvides compartirlo con tus amigos.
Si tienes dudas o sugerencias al respecto; puedes dejarnos tus comentarios.
Si te fue de gran ayuda este material, no olvides compartirlo con tus amigos.
Si tienes dudas o sugerencias al respecto; puedes dejarnos tus comentarios.
Bendiciones...
Me marco error en el primer if
ResponderBorrar