Le problème fondamental est que la fraction 45/100 n'a pas de représentation exacte comme une séquence de 1/2 n termes. En effet, le plus Les fractions écrites avec un petit nombre de chiffres en base 10 n'ont pas une représentation FP exacte.
Par conséquent, le nombre réel que vous obtenez est une approximation très proche mais non exacte de votre nombre en base 10. Les résultats de sortie dépendront de l'arrondi, mais seront corrects si vous faites tout ce qui est un tant soit peu raisonnable lors de l'arrondi.
Si vous n'arrondissez pas, le nombre exact que vous obtiendrez dépendra de l'endroit où la fraction sera coupée et du nombre de chiffres que vous tenterez de convertir. L'endroit où la fraction est coupée dépend du nombre de bits nécessaires pour représenter la mantisse. C'est pourquoi vous obtenez des résultats différents pour x .45 selon x.
Cette question revient tout le temps sur stack overflow. Je suppose que nous avons besoin d'une FAQ sur les points flottants.
Ironiquement, chaque valeur entière (dans l'intervalle) fait ont une représentation exacte en format à virgule flottante.