python十進(jìn)制和二進(jìn)制的轉(zhuǎn)換方法(含浮點(diǎn)數(shù))
本文介紹了python十進(jìn)制和二進(jìn)制的轉(zhuǎn)換方法(含浮點(diǎn)數(shù)),分享給大家,也給自己留個(gè)筆記,具體如下:
我終于寫(xiě)完了 , 十進(jìn)制轉(zhuǎn)二進(jìn)制的小數(shù)部分卡了我將近一個(gè)小時(shí)
上代碼
#-*- coding: utf-8
from decimal import Decimal
def bTod(n, pre=4):
'''
把一個(gè)帶小數(shù)的二進(jìn)制數(shù)n轉(zhuǎn)換成十進(jìn)制
小數(shù)點(diǎn)后面保留pre位小數(shù)
'''
string_number1 = str(n) #number1 表示二進(jìn)制數(shù),number2表示十進(jìn)制數(shù)
decimal = 0 #小數(shù)部分化成二進(jìn)制后的值
flag = False
for i in string_number1: #判斷是否含小數(shù)部分
if i == '.':
flag = True
break
if flag: #若二進(jìn)制數(shù)含有小數(shù)部分
string_integer, string_decimal = string_number1.split('.') #分離整數(shù)部分和小數(shù)部分
for i in range(len(string_decimal)):
decimal += 2**(-i-1)*int(string_decimal[i]) #小數(shù)部分化成二進(jìn)制
number2 = int(str(int(string_integer, 2))) + decimal
return round(number2, pre)
else: #若二進(jìn)制數(shù)只有整數(shù)部分
return int(string_number1, 2)#若只有整數(shù)部分 直接一行代碼二進(jìn)制轉(zhuǎn)十進(jìn)制 python還是騷
def dTob(n, pre=4):
'''
把一個(gè)帶小數(shù)的十進(jìn)制數(shù)n轉(zhuǎn)換成二進(jìn)制
小數(shù)點(diǎn)后面保留pre位小數(shù)
'''
string_number1 = str(n) #number1 表示十進(jìn)制數(shù),number2表示二進(jìn)制數(shù)
flag = False
for i in string_number1: #判斷是否含小數(shù)部分
if i == '.':
flag = True
break
if flag:
string_integer, string_decimal = string_number1.split('.') #分離整數(shù)部分和小數(shù)部分
integer = int(string_integer)
decimal = Decimal(str(n)) - integer
l1 = [0,1]
l2 = []
decimal_convert = ""
while True:
if integer == 0: break
x,y = divmod(integer, 2) #x為商,y為余數(shù)
l2.append(y)
integer = x
string_integer = ''.join([str(j) for j in l2[::-1]]) #整數(shù)部分轉(zhuǎn)換成二進(jìn)制
i = 0
while decimal != 0 and i < pre:
result = int(decimal * 2)
decimal = decimal * 2 - result
decimal_convert = decimal_convert + str(result)
i = i + 1
string_number2 = string_integer + '.' + decimal_convert
return float(string_number2)
else: #若十進(jìn)制只有整數(shù)部分
l1 = [0,1]
l2 = []
while True:
if n == 0: break
x,y = divmod(n, 2) #x為商,y為余數(shù)
l2.append(y)
n = x
string_number = ''.join([str(j) for j in l2[::-1]])
return int(string_number)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python 內(nèi)置函數(shù)進(jìn)制轉(zhuǎn)換的用法(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)
- Python二進(jìn)制串轉(zhuǎn)換為通用字符串的方法
- Python 字符串與二進(jìn)制串的相互轉(zhuǎn)換示例
- Python 字節(jié)流,字符串,十六進(jìn)制相互轉(zhuǎn)換實(shí)例(binascii,bytes)
- Python實(shí)現(xiàn)的十進(jìn)制小數(shù)與二進(jìn)制小數(shù)相互轉(zhuǎn)換功能
- Python 16進(jìn)制與中文相互轉(zhuǎn)換的實(shí)現(xiàn)方法
- python中常見(jiàn)進(jìn)制之間的轉(zhuǎn)換方式
- python中str、bytes、十六進(jìn)制字符串之間的相互轉(zhuǎn)換方法
相關(guān)文章
Python中的json對(duì)象與string相互轉(zhuǎn)換教程
python里有json這個(gè)庫(kù),但并沒(méi)有json這個(gè)類(lèi),所以所謂的json對(duì)象本質(zhì)上就是一個(gè)dict;而json這個(gè)庫(kù),用于實(shí)現(xiàn)dict到string、string到dict的互轉(zhuǎn),這篇文章主要介紹了Python中的json對(duì)象與string相互轉(zhuǎn)換教程,需要的朋友可以參考下2022-11-11
python?PyAutoGUI實(shí)現(xiàn)自動(dòng)化鼠標(biāo)鍵盤(pán)等常用操作
這篇文章主要介紹了python?PyAutoGUI實(shí)現(xiàn)自動(dòng)化鼠標(biāo)鍵盤(pán)等常用操作使用實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Python實(shí)現(xiàn)帶圖形界面的炸金花游戲
詐金花又叫三張牌,是在全國(guó)廣泛流傳的一種民間多人紙牌游戲,它具有獨(dú)特的比牌規(guī)則。本文將通過(guò)Python語(yǔ)言實(shí)現(xiàn)帶圖形界面的詐金花游戲,需要的可以參考一下2022-12-12
Cpython3.9源碼解析python中的大小整數(shù)
這篇文章主要介紹了Cpython3.9源碼解析python中的大小整數(shù),在CPython中,小整數(shù)對(duì)象池是一種優(yōu)化機(jī)制,用于減少對(duì)常用小整數(shù)的內(nèi)存分配和銷(xiāo)毀開(kāi)銷(xiāo),需要的朋友可以參考下2023-04-04
詳解python命令提示符窗口下如何運(yùn)行python腳本
這篇文章主要介紹了詳解python命令提示符窗口下如何運(yùn)行python腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
python偏函數(shù)的實(shí)例用法總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于python偏函數(shù)的實(shí)例用法總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。2021-07-07
python?dowhy數(shù)據(jù)估計(jì)因果分析功能探索
這篇文章主要為大家介紹了python?dowhy數(shù)據(jù)估計(jì)因果分析功能實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02

