J'essaye de convertir un nombre de valeur décimale à son formulaire IEEE 752. Par exemple:Convertir décimal en binaire IEEE
+43.9542 -> 01000010001011111101000100011010
-43.9542 -> 11000010001011111101000100011010
Et je l'ai écrit cette méthode:
public float GetFloat32(String numero) {
//Convert
int intBits = Integer.parseInt(numero, 2);
float myFloat = Float.intBitsToFloat(intBits);
//Exponent
getExponent = 127 + (String.valueOf(Integer.toBinaryString(Math.abs((int) myFloat))).length() - 1);
//Sign
getSign = (myFloat < 0) ? 1 : 0;
return myFloat;
}
Il y a un problème que je ne peux pas résoudre. Je vais faire un autre exemple pour le rendre clair.
double a = k.GetFloat32("01000010001011111101000100011010")
a = 43.9542
Mais lorsque le nombre est négatif, comme
double a = k.GetFloat32("1000010001011111101000100011010")
Je reçois cette erreur:
Cela signifie que mon code fonctionne parfaitement avec des chiffres positifs (y compris le zéro) mais avec des nombres négatifs, il se bloque. Où est le problème?
Remarque
Je pensais que je pouvais résoudre mon problème de cette façon
- Vérifiez si
String numero
a une charAt (0) égale à 1 - Si oui (numero.charAt (0) == 1) puis supprimez le premier caractère
- Appelez GetFloat32() avec le nouveau numéro (sans le 1)
- Retour le résultat addin g le - devant le num
Cela pourrait fonctionner mais j'aimerais savoir où est le problème dans la méthode ci-dessus. Je préférerais éviter cette solution si possible.
Y at-il une raison d'avoir les affectations '' getExponent' et getSign' dans la méthode? – Clashsoft
Connaissez-vous 'Float.intBitsToFloat'? –
Alberto, est-ce que 752 est une faute de frappe et voulez-vous dire 752 - l'étiquette est ieee-754. Dans ce cas, la suggestion de Paul est applicable. Je n'ai pas trouvé IEEE 752, donc je ne l'ai pas proposé. – laune