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.

Convertir 2 enteros a número flotante

Necesito convertir 2 enteros a un número flotante. Estoy utilizando la siguiente función para hacer esta conversión:

string hexString = valor1 + valor2;
uint num = uint.Parse(hexString, NumberStyles.AllowHexSpecifier);

byte[] floatVals = BitConverter.GetBytes(num);
f = BitConverter.ToSingle(floatVals, 0);

La función funciona bien, excepto cuando el segundo entero es negativo, lo cual produce una pequeña diferencia en la parte decimal.

Ejemplo:

16998 y 16673: 57.76 -> Correcto

16998 y -11174: 57.54 -> Incorrecto (El correcto es: 57.71).

Lo que estoy haciendo para acercarme al número correcto es multiplicar el segundo entero por -1 para hacerlo positivo. Mi pregunta es ¿cómo obtener el valor exacto cuando el segundo entero es negativo?

Según el manual, dice:

Manual

Captura de pantalla de mi aplicación:
Screenshot

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir los dos enteros a un número decimal en C# sin perder precisión, puede seguir los siguientes pasos:

    1. Convierta los enteros a sus representaciones hexadecimales utilizando el método ToString() con el especificador de formato “X”.
    2. Concatene las dos cadenas hexadecimales para formar una sola cadena.

    3. Utilice el método Convert.ToInt64() para convertir la cadena concatenada en un entero de 64 bits.

    4. Utilice el método BitConverter.Int64BitsToDouble() para convertir el entero de 64 bits en un número de punto flotante de doble precisión.

    5. Convierta el número de tipo double en un número de tipo float.

    El fragmento de código a continuación demuestra los pasos anteriores:

    int value1 = 16998;
    int value2 = -11174;
    
    string hexString = value1.ToString("X") + value2.ToString("X");
    
    long num = Convert.ToInt64(hexString, 16);
    
    double d = BitConverter.Int64BitsToDouble(num);
    
    float f = (float)d;
    

    Con el código anterior, obtendrá el valor exacto de punto flotante de los dos enteros, incluso cuando el segundo entero sea negativo.

Comments are closed.