简体   繁体   English

如何将浮点十进制转换为浮点八进制/二进制?

[英]How do I convert float decimal to float octal/binary?

I have been searched everywhere to find a way to convert float to octal or binary.我到处搜索以找到将浮点数转换为八进制或二进制的方法。 I know about the float.hex and float.fromhex .我知道float.hexfloat.fromhex Is theres a modules which can do the same work for octal/binary values?是否有一个模块可以对八进制/二进制值做同样的工作?

For example: I have a float 12.325 and I should get float octal 14.246 .例如:我有一个浮点数12.325 ,我应该得到浮点数八进制14.246 Tell me, how I can do this?告诉我,我怎么能做到这一点? Thanks in advance.提前致谢。

You could write your own, if you only care about three decimal places then set n to 3:您可以自己编写,如果您只关心小数点后三位,则将 n 设置为 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)))

Using your input 12.325 :使用您的输入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

Here's the solution, explanation below:这是解决方案,解释如下:

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 you can do print(FloatToOctal(12.325)) and it shall print out 14.246314631所以你可以做print(FloatToOctal(12.325))它会打印出14.246314631

Finally, if you want less octal places (decimal places but in octal) simply add the places argument: print(FloatToOctal(12.325, 3)) which returns 14.246 as is correct according to this website: http://coderstoolbox.net/number/最后,如果您想要更少的八进制位(小数位,但为八进制),只需添加places参数: print(FloatToOctal(12.325, 3))返回14.246 ,根据本网站是正确的: http : 14.246 /

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM