Originariamente inviato da VincenzoTheBest
Perchè il cast viene eseguito su 0, quindi l'effetto di dei due cast è 0.0

Devi trattare entrambi gli operandi come float (risp. double):
codice:
		System.out.println((float)1/(float)3);
		System.out.println((double)1/(double)3);
ti ringrazio, il problema è che non arrivo a concepire come possa uscire 0 da 1/3 se gli dico che voglio un double o un float in output.

io ragiono così per "debuggare" questo codice: se programmo è per far fare qualcosa e per ricevere qualcosa, giusto? se gli dico di fare 1/3 lui cosa fa realmente? da quanto mi dici devo assumere che Java approssimi per default ad un int quando c'è da operare e che non sia possibile istruire java su un casting "al volo" su una operazione.

Perché se faccio come scrivi io opero sui termini oggetto dell'operazione, in pratica faccio un casting sugli operatori che ha molta meno praticità anche se risolve il problema; se la mia operazione avesse 100 termini io dovrei fare 100 cast singoli?

Quando io vado a compilare Java sa che a runtime io voglio che da li esca fuori un double o un float, quindi non mi spiego come il parser e il compilatore non agiscano di conseguenza creando un file .class che mi dia a runtime il risultato aspettato.

ovvio che se faccio 1.0/3.0 risolvo, anche perché gli do in pasto numeri che hanno "la faccia" dei float e quindi lui adatta anche il risultato a float ( o double che sia ), ma siccome la matematica è piena di ostacoli e imprevisti, da due int possono anche uscire fuori dei numeri reali: e a questo punto come si fa? lui vede che sono int e rimane tutto ad int? possibile che Java non abbia studiato bene la matematica e si basi solo sulla "faccia" dei numeri?