Mình có đoạn code sau, thực hiện bài toán trừ 2 số double, xong chuyển sang kiểu int
0.026600 - 0.001000 = 0.025600 * 10000000 = 256000.000000
(int) 256000.000000 => kết quả mìh mong muốn là 256000
nhưng nó lại ra 255999
Điều kì lạ là lỗi này xảy ra một cách rất ngẫu nhiên, mình xem đi xem lại nhưng không hiểu sao lại bị vậy.
Đây là đoạn code của mình
int main() {
double math;
double input = 0.02660;
double i = 0.00100, imax = 0.00201; //lap 100 gia tri
int numzero = 10000000;
int input_int = 0;
int line = 0;
for(i; i < imax; i = i + 0.00001) {
math = (input - i) * numzero; //giam gia tri input va bo dau thap phan
input_int = (int) math;
//printf("Line %d: %lf - %lf = %lf (convert =>) %d\n", line, input, i, math, input_int);
printf("Line %d: %lf => %d\n", line, math, input_int);
line++;
}
}
Kết quả mình chạy
có số nó convert đúg, nhưng có số lại bị sai
mình xem đi xem lại nhưng không hiểu chuyện gì đang diễn ra?
Mong các bạn giúp đỡ, mình cảm ơn.