forse è un po estremo usare una preg replace per togliere gli zeri finali

hai provato a fare un semplice type casting del valore? tipo ...

$valore = "4.640";
$valore = (float)$valore;

?

e hai provato ad usare
round?