为什么(int)1.0变成了0?

这是一个求水仙花数的程序。
水仙花数一共有4个,只有371没有被输出。

#include<stdio.h>
#include<math.h>
int main()
{int k = 2,t,sum = 0,i=370;
double s = 0.0,p;
while (i < 1000)
{
    p = i;
    //printf("%.0f\n",p);
    s = p / pow(10, k);
    //printf("%.2f\n",s);
    while (k >= 0)
    {
        printf("s = %.3lf\n", s);
        t = (int)s;

        printf("t = %d\n",t);
        sum += t * t * t;
        k--;
        s = (s - t) * 10;

        //printf("%d\n",sum);
    }k = 2;
    if (sum == i)printf("@%d,", sum);
    sum = 0;
    i++;
}
}

如代码中所示,我在t = (int)s前后加了printf看s和t的值,得到的运行结果是这样的:

图片说明

可以看到第5行到第6行的1.000到0,得到的数是预想结果减1。
图片中第17行到第18行的3.000到2也是这样减了1。
请问为什么会这样呢,应该怎么改啊?

C中浮点型转为整型,直接截取小数部分,把整数部分作为结果

浮点数存在精度误差
t = (int)s;

->
t = (int)(s+0.000001);