es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema con la calculadora hexadecimal en las operaciones de resta y división.

Tengo una aplicación de calculadora base y me enfrento a un problema con la resta entre dos bases hexadecimales. Si es una (resta de un número grande menos un número pequeño) da el resultado correcto.
El problema se presenta cuando la operación es (resta de un número pequeño menos un número grande) por ejemplo: (1 – 22 o 1a – 22) la aplicación se bloquea y se cierra.

El método hexadecimal es el siguiente:

private void hexa_calc() {

    int num = 0;

    int num1 = Integer.parseInt(e_one.getText().toString().trim(),16);
    int num2 =Integer.parseInt(e_two.getText().toString().trim(),16);

    if (appKey1.operation.equals("+")) {
        String value = Integer.toHexString(num1 + num2);

        num = Integer.parseInt(value, 16);
        t_result.setText(String.valueOf(Integer.toHexString(num)));

    } else if (appKey1.operation.equals("-")) {

        String value = Integer.toHexString(num1 - num2);

        num = Integer.parseInt(value, 16);
        t_result.setText(String.valueOf(Integer.toHexString(num)));

    } else if (appKey1.operation.equals("X")) {

        String value = Integer.toHexString(num1 * num2);
        num = Integer.parseInt(value, 16);

        t_result.setText(String.valueOf(Integer.toHexString(num)));

    } else {

        String value = Integer.toHexString(num1 / num2);
        num = Integer.parseInt(value, 16);

        t_result.setText(String.valueOf(Integer.toHexString(num)));
    }
}

El segundo problema con la operación de división es que da (resultado = 0), no es así 0.12324 sin decimal después del cero.

¿Cómo puedo resolver este código?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Problema con las Operaciones de Resta y División en la Aplicación Calculadora Base

    La aplicación Calculadora Base está enfrentando un problema con la operación de resta entre dos números base hexadecimal. La resta ofrece el resultado correcto cuando se resta un número grande de un número pequeño. Sin embargo, la aplicación se bloquea y se cierra cuando se resta un número pequeño de un número grande, por ejemplo, (1 – 22 o 1a – 22).

    El método de cálculo hexadecimal utilizado en la aplicación es el siguiente:

    private void hexa_calc() {
    
        int num = 0;
    
        int num1 = Integer.parseInt(e_one.getText().toString().trim(),16);
        int num2 =Integer.parseInt(e_two.getText().toString().trim(),16);
    
        if (appKey1.operation.equals("+")) {
            String value = Integer.toHexString(num1 + num2);
    
            num = Integer.parseInt(value, 16);
            t_result.setText(String.valueOf(Integer.toHexString(num)));
    
        } else if (appKey1.operation.equals("-")) {
    
            String value = Integer.toHexString(num1 - num2);
    
            num = Integer.parseInt(value, 16);
            t_result.setText(String.valueOf(Integer.toHexString(num)));
    
        } else if (appKey1.operation.equals("X")) {
    
            String value = Integer.toHexString(num1 * num2);
            num = Integer.parseInt(value, 16);
    
            t_result.setText(String.valueOf(Integer.toHexString(num)));
    
        } else {
    
            String value = Integer.toHexString(num1 / num2);
            num = Integer.parseInt(value, 16);
    
            t_result.setText(String.valueOf(Integer.toHexString(num)));
        }
    }
    

    Además del problema con la operación de resta, hay otro problema con la operación de división. Devuelve el resultado como cero en lugar de un número decimal con un dígito significativo después de cero, por ejemplo, 0.12324.

    Para resolver los problemas anteriores, se pueden realizar las siguientes modificaciones en el código:

    Problema de Resta:

    Para solucionar el problema de resta entre dos números base hexadecimal, se puede agregar una verificación en el código para asegurarse de que la diferencia entre los dos números siempre sea positiva. Esto se puede lograr intercambiando los dos números si el segundo número es mayor que el primer número. El código actualizado puede ser el siguiente:

    private void hexa_calc() {
    
        int num = 0;
    
        int num1 = Integer.parseInt(e_one.getText().toString().trim(),16);
        int num2 =Integer.parseInt(e_two.getText().toString().trim(),16);
    
        if (appKey1.operation.equals("+")) {
            String value = Integer.toHexString(num1 + num2);
    
            num = Integer.parseInt(value, 16);
            t_result.setText(String.valueOf(Integer.toHexString(num)));
    
        } else if (appKey1.operation.equals("-")) {
    
            // Intercambiar los dos números si el segundo número es mayor que el primero
            if (num1 < num2) {
                int tmp = num1;
                num1 = num2;
                num2 = tmp;
            }
    
            String value = Integer.toHexString(num1 - num2);
            num = Integer.parseInt(value, 16);
            t_result.setText(String.valueOf(Integer.toHexString(num)));
    
        } else if (appKey1.operation.equals("X")) {
    
            String value = Integer.toHexString(num1 * num2);
            num = Integer.parseInt(value, 16);
    
            t_result.setText(String.valueOf(Integer.toHexString(num)));
    
        } else {
    
            String value = Integer.toHexString(num1 / num2);
            num = Integer.parseInt(value, 16);
    
            t_result.setText(String.valueOf(Float.intBitsToFloat(num)));
        }
    }
    

    Problema de División:

    Para solucionar el problema de la división donde el resultado siempre es cero, se puede cambiar el tipo de dato del resultado a Float en lugar de int. Esto proporcionará lugares decimales en el resultado. Además, se puede utilizar el método Float.intBitsToFloat() para convertir el valor entero en un valor flotante con dígitos significativos. El código actualizado para la operación de división puede ser el siguiente:

    String value = Integer.toHexString(num1 / num2);
    num = Integer.parseInt(value, 16);
    t_result.setText(String.valueOf(Float.intBitsToFloat(num)));
    

    Con las modificaciones anteriores, la aplicación debería poder realizar las operaciones de resta entre dos números base hexadecimal correctamente. Además, la operación de división debería proporcionar el resultado con un dígito significativo después de cero en lugar de ser siempre cero.

Comments are closed.