Các Vấn Đề Thường Gặp trong Python - [3] Kiểu Dữ Liệu Số Thực
By JoeVu, at: 14:30 Ngày 12 tháng 1 năm 2023
Thời gian đọc ước tính: __READING_TIME__ phút
![Common Python Problems - [3] Float Data Types](/media/filer_public_thumbnails/filer_public/47/99/479924d1-8cf9-46d7-9a61-eef8216b626a/python_mistake_-_float_data_type.png__1500x900_q85_crop_subsampling-2_upscale.jpg)
![Common Python Problems - [3] Float Data Types](/media/filer_public_thumbnails/filer_public/47/99/479924d1-8cf9-46d7-9a61-eef8216b626a/python_mistake_-_float_data_type.png__400x240_q85_crop_subsampling-2_upscale.jpg)
1. Sai số trong phép tính số dấu phẩy động
Ví dụ 1
x = 1/10
y = 1/5
z = x + y
print(z) # kết quả mong đợi là 0.3
Kết quả
0.30000000000000004
Giải pháp: Sử dụng module decimal trong Python, ta có thể biểu diễn chính xác các giá trị thập phân và tránh sai số dấu phẩy động.
from decimal import Decimal
x = Decimal("1") / Decimal("10")
y = Decimal("1") / Decimal("5")
z = x + y
print(z) # kết quả mong đợi là 0.3
Kết quả
0.3
2. Lỗi tràn số
Ví dụ 1
Một ví dụ về lỗi tràn số float trong Python được thể hiện bên dưới:
num1 = 9e309
num2 = 2
result = num1 * num2
print(result)
Kết quả
inf
Giải pháp: Python sẽ gây ra lỗi OverflowError khi giá trị của một số float quá lớn. Để tránh lỗi này, bạn có thể sử dụng module Decimal để xử lý các số lớn và ngăn chặn lỗi tràn số float. Ví dụ:
num1 = Decimal("9e309")
num2 = Decimal(2)
result = num1 * num2
print(result)
Kết quả
1.8E+310
3. Lỗi làm tròn
Ví dụ 1
# Chúng ta đang cố tính toán 0.1 + 0.2
x = 1/10
y = 1/5
z = x + y
print(z)
Kết quả
0.30000000000000004
Giải pháp: Chúng ta có thể sử dụng hàm round() để làm tròn kết quả
x = 1/10
y = 1/5
z = x + y
rounded_z = round(z, 2)
print(rounded_z)
Kết quả
0.3