개요
실수(float) 값과 결과의 자릿수를 입력받아 해당 값을 8진수 형태로 변환하는 파이썬 프로그램을 만들어 보겠습니다.
변환 알고리즘
부동 소수점 값을 8진수로 변환할 때는 정수 부분과 소수 부분을 각각 따로 처리한 후 두 결과를 하나로 합치는 방식을 사용합니다.
1단계: 정수 부분 변환
정수 부분을 8로 계속 나누면서 그때마다 나머지를 기록합니다. 피제수가 8보다 작아질 때까지 이 과정을 반복한 뒤, 기록해 둔 나머지들을 차례대로 이어 붙이면 8진수 정수 부분이 완성됩니다.
2단계: 소수 부분 변환
소수 부분에 8을 곱합니다. 첫 번째 곱셈 결과의 정수 부분을 기록하고, 남은 소수 부분에 다시 8을 곱하는 과정을 소수 부분이 0이 되거나 원하는 자릿수에 도달할 때까지 반복합니다.
3단계: 두 부분 결합
정수 부분과 소수 부분의 8진수 표현을 마침표(.)로 연결하면 최종 결과가 완성됩니다.
예제 코드
def float_convert_octal(my_number, places=3):
my_whole, my_dec = str(my_number).split(".")
my_whole = int(my_whole)
my_dec = int(my_dec)
res = oct(my_whole).lstrip("0o") + "."
for x in range(places):
my_whole, my_dec = str((decimal_converter(my_dec)) * 8).split(".")
my_dec = int(my_dec)
res += my_whole
return res
def decimal_converter(num):
while num > 1:
num /= 10
return num
n = input("Enter the floating point value : \n")
p = int(input("Enter the number of decimal places of the result : \n"))
print(float_convert_octal(n, places=p))
코드 설명
float_convert_octal(): 전체 변환을 담당하는 메인 함수입니다. 입력값을 문자열로 분리해 정수 부분과 소수 부분을 구한 뒤, 내장 함수oct()로 정수 부분을 8진수로 변환하고 접두사 "0o"를 제거합니다.decimal_converter(): 정수 형태로 저장된 소수 부분(예: 89)을 0.89처럼 1 미만의 실수로 되돌려 주는 보조 함수입니다.- for 루프는 지정된 자릿수만큼 소수 부분에 8을 곱하며, 매 단계의 정수 부분을 결과 문자열에 추가합니다.
실행 결과
Enter the floating point value : 6.89 Enter the number of decimal places of the result : 12 6.707534121727
위 예시에서는 6.89를 12자리 8진수로 변환하여 6.707534121727이 출력되었습니다.