溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python十進(jìn)制和二進(jìn)制的轉(zhuǎn)換方法(含浮點(diǎn)數(shù))

發(fā)布時(shí)間:2020-10-19 21:04:31 來(lái)源:腳本之家 閱讀:200 作者:kick-ass。Nuisance 欄目:開(kāi)發(fā)技術(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í)有所幫助,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI