Чушь! 9.995 * 100.0 = 999.5 И простое округление, а не в большую сторону, должно дать 1000. С какого это должно получиться 999? Вы таки хотите floor(), т.е. без округления? Ну тогда зачем же жаловаться, что 4.45*100.0 = 444.999[9] и, в итоге ~= 444 ? Хочется получить, видимо, таки округление, но не до целых, а, например, до 1/100. Смотри пример (компилировать строго в GCC, во-избежание...):
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
volatile float x=4.45;
int main()
{
volatile float a, b, c;
volatile int y;
a=x*100;
b=445.0;
c=a+1/100.0;
printf("%f, %f, %f : %8.8lx, %8.8lx, %8.8lx\n",
(double)a, (double)c, (double)b,
*(unsigned long*)&a, *(unsigned long*)&c, *(unsigned long*)&b);
y=({ char s[16]; sprintf(s, "%.2f", (double)a), atoi(s);});
printf("y=%d\n", y);
return 0;
}
Вывод программы:
$ ./a.out
444.999969, 445.009979, 445.000000 : 43de7fff, 43de8147, 43de8000
y=445