[英]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.hex
和float.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.