Chuyển đổi số float thập phân sang hệ bát phân (octal): tách phần nguyên và phần thập phân, chuyển đổi riêng rồi ghép lại.
Thuật toán
- Phần nguyên: Chia liên tiếp cho 8, lấy phần dư ngược lại.
- Phần thập phân: Nhân liên tiếp với 8, lấy phần nguyên từng bước.
- Ghép hai phần với dấu chấm.
Code
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 _ 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
# Test
n = input("Nhập số thực: ")
p = int(input("Số chữ số thập phân kết quả: "))
print(float_convert_octal(n, places=p))
Ví dụ
Nhập số thực: 6.89
Số chữ số thập phân: 12
Kết quả: 6.707534121727
Lưu ý
- Số thập phân trong hệ bát phân thường là vô tận (tương tự 1/3 trong thập phân), nên cần giới hạn số chữ số (
places). - Hàm
decimal_converterchuẩn hóa phần thập phân về dạng 0.xxx trước khi nhân 8.