30/09/2018, 17:06
Lấy ra chính xác phần thập phân của số thực
Em cần lấy chính xác giá trị phần thập phân phía sau của 1 số thực, là lấy giá trị luôn chứ không phải in ra đâu ạ.
Đây là đoạn code minh họa, mục đích của em là muốn câu lệnh (fractional == 0.4) ra giá trị true
#include <iostream>
using namespace std;
int main(){
double a = 2.4;
double fractional = a - (int)a;
//double fractional = 0.4;
cout << (fractional == 0.4) << endl;
return 0;
}
Lúc debug em mới phát hiện ra là fractional nó là 3.9999999998 chứ không phải 0.4
Mọi người giải thích giùm em và tìm hướng giải quyết bài này với ạ
Bài liên quan
Em không lấy được chính xác phần lẻ của số thực được đâu. Về bản chất
float
vàdouble
không có độ chính xác không cao. Phần lẻ không đực thể hiện dưới dạng “số” mà thực ra là “số mũ”. Tức thay vì lưu toàn bộ một số xuống bộ nhớ như kiểuint
, kiểudouble
sẽ lưu dữ liệu ở dạng “số mũ”.Ví dụ đây là cách lưu số
1/3
Xem thêm: http://en.wikipedia.org/wiki/Double-precision_floating-point_format
Double chỉ có thể đúng “tàm tạm” mà thôi. Nếu em muốn so sánh với
0.4
thì ta có thể làm như sauTương đương với
Với
abs
là hàm tính giá trị tuyệt đối của phép trừ(fractional - 0.4)
. Nếu giá trị này bé hơn hoặc bằng0.0000001
thì coi nhưfractional
và0.4
là bằng nhau.P/S: Nhớ
#include <cmath>
Em cảm ơn anh nhiều ạ