2010-09-23 5 views
4

Ce n'est pas nécessairement une question de programmation, mais je suis sûr que vous savez comment le faire. Comment devrais-je convertir les nombres à virgule flottante en binaire.Comment convertir la décimale (xx.xx) en binaire

Le nombre que je regarde est 27.625.

27 serait 11011, mais que faire avec le .625?

+1

Essayez http://math.stackexchange.com – NullUserException

+0

En attendant, voir [ce ] (http://cs.furman.edu/digitaldomain/more/ch6/dec_frac_to_bin.htm). Il y a aussi un [outil] (http://www.digitconvert.com/) qui le fait pour vous. – NullUserException

Répondre

7

En supposant que vous ne pensez pas à l'intérieur d'un PC, juste à y penser binaire vs décimal comme matérialisé sur un morceau de papier:

Vous savez .1 en binaire doit être 0,5 en décimal, donc de la .1 endroit vaut .5 (1/2)

le .01 vaut 0,25 (1/4) (la moitié de la précédente)

le .001 vaut (1/8) (la moitié de 1/4)

Remarquez comment le dénominateur progresse tout comme les nombres entiers à gauche du décimal faire - modèle standard^2? Le prochain devrait être 1/16 ...

Donc, vous commencez avec votre .625, est-il plus élevé que .5? Oui, si le premier bit mis et soustraire le 0,5

0,1 binaire avec un reste décimal de 0,125

Maintenant, vous avez le prochain endroit, il vaut la peine .25dec, est que moins de votre reste actuel .125? Non, donc vous n'avez pas assez de décimal "Money" pour acheter cette deuxième place, il doit être 0

.10 binaire, reste .125 reste.

Allez maintenant à la troisième position, etc. (Astuce: Je ne pense pas qu'il y aura trop etc.)

2

Il existe plusieurs façons de coder un nombre non entier en binaire. De loin le type le plus commun sont des représentations à virgule flottante, en particulier celle codifiée en IEEE 754.

11

Sur le papier, un bon algorithme pour convertir la partie fractionnaire d'un nombre décimal est l'algorithme "multiplication répétée par 2" (voir les détails à http://www.exploringbinary.com/base-conversion-in-php-using-bcmath/, sous le titre "dec2bin_f()"). Par exemple, 0,8125 convertis à binaire comme suit:

1. 0.8125 * 2 = 1.625 
2. 0.625 * 2 = 1.25 
3. 0.25 * 2 = 0.5 
4. 0.5 * 2 = 1.0 

Les parties entières sont arrachées et enregistrées à chaque étape, former le résultat binaire: 0,1101.

Si vous souhaitez qu'un outil effectue automatiquement ce type de conversions, consultez mon decimal/binary converter.

+0

C'est un truc mignon - je ne l'ai jamais vu. Je ne vous apprends pas vraiment ce qui se passe - je me demande comment cela se traduit par d'autres bases ... Je vais aller me chercher un peu d'octal. –

+1

@ Bill K: Cela fonctionne pour n'importe quelle base! Pour l'octal, par exemple, il suffit de remplacer 2 par 8 (0,8125 convertis en 0,64 base 8). –

+0

aime ce truc! Merci beaucoup! – dessskris

0

le code fonctionne pour moi est comme ci-dessous, vous pouvez utiliser ce code pour convertir tout type de valeurs Dobule:

private static String doubleToBinaryString(double n) { 
     String val = Integer.toBinaryString((int)n)+".";  // Setting up string for result 

    String newN ="0" + (""+n).substring((""+n).indexOf(".")); 
    n = Double.parseDouble(newN); 

     while (n > 0) {  // While the fraction is greater than zero (not equal or less than zero) 
      double r = n * 2; // Multiply current fraction (n) by 2 
      if(r >= 1) {  // If the ones-place digit >= 1 
       val += "1";  // Concat a "1" to the end of the result string (val) 
       n = r - 1;  // Remove the 1 from the current fraction (n) 
      }else{    // If the ones-place digit == 0 
       val += "0";  // Concat a "0" to the end of the result string (val) 
       n = r;   // Set the current fraction (n) to the new fraction 
      } 
     } 
     return val;   // return the string result with all appended binary values 

    } 
Questions connexes