GigiG:
perchè il float 0.28 moltiplicato per 100 diventa 27?
Sei incappato nel classico caso di errore da float dovuto alla sua rappresentazione, il valore è sotto forma di esponenziale cosa che rende possibile trattare valori enormi, oltre che con i decimali, però non è per niente preciso, sopratutto nei float a 32 bit dove hai solo 6-7 cifre per la rappresentazione del valore.
In pratica il tuo numero in realtà non è 0.28, è qualcosa del tipo 0.279998, quando lo visualizzi con la print, con solo due cifre, viene arrotondato a 0.28, però quando fai la moltiplicazione diventa 27.998 e troncato a 27 quando diventa intero.
Il modo per evitare il problema è non usare i float, lavora solo con gli interi, previa moltiplicazione per 10-100-1000 a seconda di quanti decimali vuoi, e fai la conversione in float solo per visualizzazione se realmente necessaria.
Oltre a guadagnare in precisione guadagni anche in velocità nei calcoli, anche se usi un long int a 32 bit ci vuole meno tempo per fare i vari calcoli rispetto ad un float, quest'ultimi sei obbligato ad usarli solo per certi calcoli, p.e. le funzioni trigonometriche, che si aspettano valori float in ingresso e rendono dei float.