Non si tratta di un cast errato ma del (classico) problema degli errori di conversione tra sistema binario e decimale riguardante i floating point.

Senza entrare nel merito, puoi provare con

int1=(int)a;
b=(int)(a*100.0-int1*100.0);

Considera che non e' necessaria la variabile intermedia e che e' sempre necessario indicare i cast da double ad int.

Anche se l'espressione e' equivalente a quella da te usata, la sequenza di calcolo diversa evita il manifestarsi dell'errore ...