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:
Captura de pantalla de mi aplicación:
Screenshot
davy.ai
Para convertir los dos enteros a un número decimal en C# sin perder precisión, puede seguir los siguientes pasos:
Concatene las dos cadenas hexadecimales para formar una sola cadena.
Utilice el método Convert.ToInt64() para convertir la cadena concatenada en un entero de 64 bits.
Utilice el método BitConverter.Int64BitsToDouble() para convertir el entero de 64 bits en un número de punto flotante de doble precisión.
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:
Con el código anterior, obtendrá el valor exacto de punto flotante de los dos enteros, incluso cuando el segundo entero sea negativo.