2016-10-14 2 views
2

Ich wurde überall gesucht, um eine Möglichkeit zu finden, float in oktal oder binär zu konvertieren. Ich kenne die float.hex und float.fromhex. Gibt es ein Modul, das die gleiche Arbeit für Oktal-/Binärwerte leisten kann?Wie konvertiere ich float dezimal in Float oktal/binär?

Zum Beispiel: Ich habe einen Schwimmer 12.325 und ich sollte Float Octal 14.246 bekommen. Sag mir, wie ich das machen kann? Danke im Voraus.

+2

Was ist das für ? Können Sie einige Beispiele für die gewünschte Eingabe und Ausgabe angeben? Die Darstellung von Float-Werten in Oktal ist eine sehr ungewöhnliche Sache. Für Binärdateien können Sie einfach 'float.hex' verwenden und dann Zeichenfolgenoperationen verwenden, um jede hexadezimale Zahl durch ihre binäre 4-Bit-Entsprechung zu ersetzen. –

+0

@MarkDickinson zum Beispiel: ich habe ein float '12.325' und ich sollte float octal' 14.246' (gerundet) bekommen. Ich habe keine Idee, wie man es macht – MaxLunar

+1

Danke für das Beispiel; es wäre nützlich, das in die Frage selbst zu bearbeiten. Kannst du auch erklären, was du mit "float octal" meinst. Haben Sie eine bestimmte Ziel-Gleitkommadarstellung vor Augen oder wollen Sie einfach einen Wert, der sowohl mit einem ganzzahligen Teil als auch mit einem gebrochenen Teil oktal geschrieben ist? –

Antwort

0

Hier ist die Lösung, Erklärung unten:

def ToLessThanOne(num): # Change "num" into a decimal <1 
    while num > 1: 
     num /= 10 
    return num 

def FloatToOctal(flo, places=8): # Flo is float, places is octal places 
    main, dec = str(flo).split(".") # Split into Main (integer component) 
            # and Dec (decimal component) 
    main, dec = int(main), int(dec) # Turn into integers 

    res = oct(main)[2::]+"." # Turn the integer component into an octal value 
          # while removing the "ox" that would normally appear ([2::]) 
          # Also, res means result 

    # NOTE: main and dec are being recycled here 

    for x in range(places): 
     main, dec = str((ToLessThanOne(dec))*8).split(".") # main is integer octal 
                  # component 
                  # dec is octal point 
                  # component 
     dec = int(dec) # make dec an integer 

     res += main # Add the octal num to the end of the result 

    return res # finally return the result 

So können Sie print(FloatToOctal(12.325)) an tun d es wird 14.246314631

schließlich heraus drucken, wenn Sie weniger Oktal Orte wollen (Dezimalstellen aber in Oktal) fügen Sie einfach die places Argument: print(FloatToOctal(12.325, 3)) die 14.246 kehrt als korrekt ist nach dieser Website: http://coderstoolbox.net/number/

1

Sie könnten Ihre eigenen schreiben, wenn Sie nur über drei Dezimalstellen sorgen dann n auf 3:

def frac_to_oct(f, n=4): 
    # store the number before the decimal point 
    whole = int(f) 
    rem = (f - whole) * 8 
    int_ = int(rem) 
    rem = (rem - int_) * 8 
    octals = [str(int_)] 
    count = 1 
    # loop until 8 * rem gives you a whole num or n times 
    while rem and count < n: 
     count += 1 
     int_ = int(rem) 
     rem = (rem - int_) * 8 
     octals.append(str(int_)) 
    return float("{:o}.{}".format(whole, "".join(octals))) 

Ihre Eingabe Mit 12,325:

In [9]: frac_to_oct(12.325) 
Out[9]: 14.2463 
In [10]: frac_to_oct(121212.325, 4) 
Out[10]: 354574.2463 

In [11]: frac_to_oct(0.325, 4) 
Out[11]: 0.2463 
In [12]: frac_to_oct(2.1, 4) 
Out[12]: 2.0631 
In [13]: frac_to_oct(0) 
Out[13]: 0.0 
In [14]: frac_to_oct(33) 
Out[14]: 41.0 
+0

Ahem ... 'frac (12.325)' gibt mir '10,24631'. Etwas stimmt nicht, aber ich sehe es nicht – MaxLunar

+0

@MaxLunar. Ähem, es sieht nicht so aus, wie du sehen kannst. Es sei denn, Ihr Gebietsschema beeinflusst möglicherweise die Ausgabe –

+0

Diese "Lösung" funktioniert nicht. Es gibt falsche Werte. – Frogboxe