Tương tự chuyển sang bát phân, nhưng cơ số là 2. Tách phần nguyên và phần thập phân, chuyển đổi riêng.
Ví dụ minh họa
Số: 22.625
Phần nguyên 22 → nhị phân: 10110
Phần thập phân 0.625 → nhị phân: 0.101
Kết quả: 10110.101
Code (đã sửa lỗi: dùng *2 thay vì *8)
def float_to_binary(my_number, places=3):
my_whole, my_dec = str(my_number).split(".")
my_whole = int(my_whole)
my_dec = int(my_dec)
res = bin(my_whole).lstrip("0b") + "."
for _ in range(places):
my_whole, my_dec = str((decimal_converter(my_dec)) * 2).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ố nhị phân sau dấu phẩy: "))
print(float_to_binary(n, places=p))
Ví dụ chạy
Nhập số thực: 2.34
Số chữ số: 3
Kết quả: 10.010 (xấp xỉ, do 0.34 không diễn tả chính xác được trong nhị phân hữu hạn)
Lưu ý quan trọng
- Code gốc bài viết nhầm dùng
* 8thay vì* 2cho nhị phân – đã sửa trong phiên bản này. - Nhiều số thập phân không biểu diễn chính xác trong nhị phân (ví dụ 0.1, 0.34), kết quả là xấp xỉ.
- Python có sẵn
float.hex()và modulestructcho chuyển đổi chính xác theo IEEE 754.