Lamento ese inconveniente, obvié algunas pruebas:
Código Delphi
[-]
try
StrToFloat(Text); Sender.AsString := Text; except
ShowMessage('mi fallo');
sysutils.Abort; end;
El problema es que se producía una excepción al convertir el valor; la capturabamos mediante el except, pero no haciamos nada, por tanto el DBEdit no se "entera" de que ha habido un fallo e intenta validar el texto antiguo.
Ahora nos aseguramos de que "se entere" mediante Sysutils.Abort, y además, si no ha habido fallo, asignamos nosotros el valor mediante Sender.AsString.
Un saludo