Wcale nie żart Groooomie... Część osób zapisuje float nie jako float czy double w bazie, ale właśnie varchar. Stąd ten wtręt o nim. Co do float to zastanów się nad ewentualnym przejściem na double, który ma większą precyzję. Sam z floatem miałem ten problem i choć double nie rozwiązał problemu, to go zmniejszył do sensownych wartości. Zależy wszystko od tego czy operacje będą wykonywane w bazie czy w php. Osobiście bym się skłaniał przy:
a) jeśli robisz obliczenia w bazie na polach => double

baza tylko przechowuje dane dla operacji w php => varchar
Czemu? Bo przechowywanie wartości jako ciąg znakowy zachowa jego formę w takiej postaci jak chcesz, bez strat związanych z zaokrąglaniem. Ma to jednak tylko sens dla przechowywania niewielkiej ilości danych i na dłuższą metę spowodować może spadek wydajności.
Wybór więc jest tak naprawdę między mniejszym lub większym złem. Problemu by nie było, gdyby liczby mogły zapisywać dane w systemie dziesiętnym. Ale działają w binarnym (choć są pewne ruskie działające w trójkowym, ale to tylko ciekawostka bez znaczenia) i dlatego zawsze będzie problem.
@Thunder: down
Z tym Groooomem to żart słowny z nicka. Thunder to wszak piorun, grzmot, grom. A że masz przeciągnięcie na 'u' to ja przeciągnąłem na 'o' i tak z Thuuuunder zrobił się Grooom

A co do float to nie wiedzieć czemu, ma on bardzo małą dokładność w Mysql. Powinien mieć aż do 24 miejsc po przecinku teoretycznie (tyle można mu nakazać definiując typ), co zresztą jest opisane w manualu, ale widocznie ma jakąś znacznie niższą domyślną wartość parametru precyzji. Zbyt niską do typowych obliczeń. Z tego co przed chwilą zerknąłem do manuala, można jednak definiując typ kolumny nakazać by float miał określoną precyzję, do 53 miejsca włącznie.