Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 부동 소수점 숫자를 8진수로 변환하는 방법

개요

실수(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이 출력되었습니다.