mmh... ma se dici che viene arrotondato, allora cosa intendi? al valore intero?... se è così il problema è nella chiamata str_replace che fai la riga precedente a number_format... cambi il "." con la "," e quindi quando chiami number_format per lui il numero è solo la prima farte (fino alla virgola)... perchè usi str_replace per cambiare "." con ","? Elimina quelle righe.