如何将 float decimal 转换为 float octal/binary?
How do I convert float decimal to float octal/binary?
我到处搜索以找到将浮点数转换为八进制或二进制的方法。我知道 float.hex
和 float.fromhex
。是否有模块可以为 octal/binary 值做同样的工作?
例如:我有一个浮点数 12.325
,我应该得到八进制浮点数 14.246
。告诉我,我该怎么做?提前致谢。
您可以自己编写,如果您只关心小数点后三位,则将 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)))
使用您的输入 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
解决方法如下,解释如下:
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
所以你可以做 print(FloatToOctal(12.325))
它会打印出 14.246314631
最后,如果你想要更少的八进制位(小数位但八进制)只需添加 places
参数:print(FloatToOctal(12.325, 3))
which returns 14.246
as is correct according to到这个网站:http://coderstoolbox.net/number/
我到处搜索以找到将浮点数转换为八进制或二进制的方法。我知道 float.hex
和 float.fromhex
。是否有模块可以为 octal/binary 值做同样的工作?
例如:我有一个浮点数 12.325
,我应该得到八进制浮点数 14.246
。告诉我,我该怎么做?提前致谢。
您可以自己编写,如果您只关心小数点后三位,则将 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)))
使用您的输入 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
解决方法如下,解释如下:
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
所以你可以做 print(FloatToOctal(12.325))
它会打印出 14.246314631
最后,如果你想要更少的八进制位(小数位但八进制)只需添加 places
参数:print(FloatToOctal(12.325, 3))
which returns 14.246
as is correct according to到这个网站:http://coderstoolbox.net/number/