본문 바로가기

프로그래밍/Python

[Python] 십진수소수 이진수로 변환하기

반응형

십진수 정수를 이진수로 변환하는 것은 파이썬이 기본으로 제공하는 bin 함수를 사용하면 된다.

소수점 이하 자릿수를 포함한 십진수를 이진수로 표현하는 함수를 만들어 보았다. 입력을 float 으로 변환하면, 부동소수점 오류로 정확한 계산이 불가능하다. 분수를 다룰 수 있는 fractions 모듈을 이용하여 정확하게 소수점 아래까지 구할 수 있다.

순환마디까지 구할 수 있는데, 일단 무시하고 30자리까지 구하는 걸 구현했다.

from fractions import Fraction

def conv2bin(s):
	x = Fraction(s)
	x1 = x//1
	x2 = x - x1
	digits = []
	tail = "..."
	for _ in range(30):
		if x2 == 0:
			tail = ""
			break
		x2 = x2 * 2
		if x2 < 1:
			digits.append("0")
		else:
			digits.append("1")
			x2 -= 1
	return bin(x1)[2:] + "." + "".join(digits) + tail


conv2bin("2.2")
### '10.001100110011001100110011001100...'

conv2bin("2.23")
### '10.001110101110000101000111101011...'

conv2bin("2.24")
### '10.001111010111000010100011110101...'

conv2bin("2.25")
### '10.01'

 

Decimal to Binary Converter

 

daewonyoon.pythonanywhere.com

 

728x90