I tried to solve a task on codewars and happened something strange, in one case casting worked as usual and in the second o got strange behavior. Here is the code:
#include <stdio.h>
#include <string.h>
#include <math.h>
int digital_root(int n) {
  char tmp[30];
  char *ptr;
  while(n > 9){
    sprintf(tmp, "%d", n);
    int len = strlen(tmp);
    float n_tmp = n / (pow(10, len));
    n = 0;
    for(int i = 1; i <=len; i++){
      float t = n_tmp * (pow(10, i));
      printf(" vars = [%f , %d] ", t, (int)t); //this line
      n += (int) t;
      n_tmp -= (int)t/pow(10,i);
    }
  }
  return n;
}
int main()
{
    digital_root(16);
    return 0;
}
And the line printf(" vars = [%f , %d] ", t, (int)t); outputs: vars = [1.600000 , 1]  vars = [6.000000 , 5], what is so strange. Can someone explain this behavior?
 
    