per comprendere meglio come operare del casting in java e come questo viene gestito ho scritto 4 semplicissime righe

codice:
public class test {
	public static void main ( String[] args )
	{
		System.out.println((short)(1/3));
		System.out.println((int)(1/3));
		System.out.println((float)(1/3));
		System.out.println((double)(1/3));
	}
}
che da come output

codice:
0
0
0.0
0.0
non mi spiego perché negli ultimi 2 casi l'output è 0.0 anziché qualcosa di simile a 0.3 con 3 periodico, perché non mi esegue un casting corretto ( ovvero che mi salvi il risultato convertendolo in virgola mobile ) ?