Làm thế nào đến ceil() làm tròn lên một phần nổi thậm chí không có phần phân đoạn?
Khi tôi cố gắng để làm điều này:math.h ceil không hoạt động như mong đợi trong C
double x = 2.22;
x *= 100; //which becomes 222.00...
printf("%lf", ceil(x)); //prints 223.00... (?)
Nhưng khi tôi thay đổi giá trị 2,22 đến 2,21
x *= 100; //which becomes 221.00...
printf("%lf", ceil(x)); //prints 221.00... as expected
tôi đã cố gắng để làm điều đó một cách khác như thế này sử dụng modf() và gặp phải khác lạ điều:
double x = 2.22 * 100;
double num, fraction;
fraction = modf(x, &num);
if(fraction > 0)
num += 1; //goes inside here even when fraction is 0.00...
Vậy điều gì xảy ra là 0,000 ... lớn hơn 0?
Có ai giải thích tại sao cả hai tình huống này đang xảy ra? Ngoài ra tôi đang biên dịch bằng cách sử dụng phiên bản cc 4.1.2 trong RedHat.
Bản sao: http://stackoverflow.com/questions/177506/why-do-i-see-a-double-variable-initialized-to-some-value-like-21-4-as-21-39999961 , http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary –