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
floatvàdoublekhô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ểudoublesẽ lưu dữ liệu ở dạng “số mũ”.Ví dụ đây là cách lưu số
1/3Xem 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.4thì ta có thể làm như sauTương đương với
Với
abslà 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.0000001thì coi nhưfractionalvà0.4là bằng nhau.P/S: Nhớ
#include <cmath>Em cảm ơn anh nhiều ạ