Không có số nào như 8.7 hoặc 1.3 trong dấu phẩy động. Có một số 10, và một số -6,5, và một số 0,96044921875 ... nhưng không có 8,7 hoặc 1,3.
Tốt nhất, máy tính của bạn có thể làm tròn 8.7 đến số dấu phẩy động gần nhất, và làm tròn 1.3 đến số dấu phẩy động gần nhất. Máy tính thêm các số được làm tròn này vào nhau và sau đó làm tròn kết quả.
Không sử dụng số dấu phẩy động để kiếm tiền.
#include <stdio.h>
int main(int argc, char *argv[])
{
float a = 8.7, b = 1.3;
printf("Looks like: %.1f + %.1f = %.1f\n", a, b, a+b);
printf("The truth: %.20f + %.20f = %.20f\n", a, b, a+b);
return 0;
}
Trên x86 GCC/máy tính Linux, tôi nhận được kết quả:
Looks like: 8.7 + 1.3 = 10.0
The truth: 8.69999980926513671875 + 1.29999995231628417969 = 9.99999976158142089844
Trên một máy tính PPC GCC/OS X, tôi nhận được kết quả:
Looks like: 8.7 + 1.3 = 10.0
The truth: 8.69999980926513671875 + 1.29999995231628417969 = 10.00000000000000000000
Thông báo cách 8.7 và 1.3 được làm tròn xuống trong trường hợp cụ thể này. Nếu bạn chọn số được làm tròn lên, bạn có thể thấy một số lớn hơn 10 ở phía bên tay phải.
Xem Điều mà mỗi nhà khoa học máy tính nên biết về số học dấu chấm động, bởi David Goldberg (link).
Không sử dụng ** binary ** floating-point cho tiền. Dấu phẩy thập phân được chuẩn hóa chính xác cho các ứng dụng tài chính. –
@Pascal Cuoq: Không nên sử dụng số thập phân cố định cho tiền? Ở một số nơi, số học như vậy được yêu cầu về mặt pháp lý ... –