Problema con number_format() durante il fetching

Ciao a tutti,

Ho provato a usare number_format() all'interno di un ciclo while per il fetching, ed ho notato che non tiene i decimali.

Non so se sia la funzione giusta in questa situazione, comuque ecco di seguito l'esempio:

start_balance.php (senza l'ausilio di number_format())

<?php
function start_balance($pu,$ba,$data)
{
require 'config.php';
require 'connect.php';
$query = "select (fin_record_debit-fin_record_credit) as fin_record_bal1 from fin_records where (fin_record_date<='$data') and (id_production_unit='$pu') and (id_bank_account='$ba')";
$result = mysql_query($query);
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
while ($row = mysql_fetch_assoc($result)) 
{
$fin_record_bal2   +=$row[fin_record_bal1];
echo 'Saldo='.$row[fin_record_bal1];
echo 'Saldo_progressivo='.$fin_record_bal2;
echo '<br>';
}
return $fin_record_bal2;
}
?>

start_balance3.php (con l'ausilio di number_format())

<?php
function start_balance($pu,$ba,$data)
{
require 'config.php';
require 'connect.php';
$query = "select (fin_record_debit-fin_record_credit) as fin_record_bal1 from fin_records where (fin_record_date<='$data') and (id_production_unit='$pu') and (id_bank_account='$ba')";
$result = mysql_query($query);
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
while ($row = mysql_fetch_assoc($result)) 
{
$fin_record_bal1 = $row[fin_record_bal1];
$fin_record_bal1 = number_format($fin_record_bal1, 2, ',', '.');
$fin_record_bal2 +=$row[fin_record_bal1];
$fin_record_bal2 = number_format($fin_record_bal2, 2, ',', '.');
echo 'Saldo='.$fin_record_bal1;
echo 'Saldo_progressivo='.$fin_record_bal2;
echo '<br>';
}
return $fin_record_bal2;
}
?>

Successivamente se lancio il seguente script

trial_start_balance3.php

<?php
require 'start_balance3.php';
$dipu_p=2;
$diba_p=12;
$data_last_bal='2007-9-20';
echo start_balance($dipu_p,$diba_p,$data_last_bal);
?>

ottengo:

Saldo=-123,00Saldo_progressivo=-123,00

Saldo=-100,00Saldo_progressivo=-223,00

Saldo=-120,00Saldo_progressivo=-343,00

Saldo=-12,00Saldo_progressivo=-355,00

Saldo=-123,12Saldo_progressivo=-478,12

Saldo=-12,00Saldo_progressivo=-490,00

Saldo=-124,00Saldo_progressivo=-614,00

Saldo=-112,00Saldo_progressivo=-726,00

Saldo=-101,00Saldo_progressivo=-827,00

Saldo=-101,00Saldo_progressivo=-928,00

Saldo=-101,00Saldo_progressivo=-1.029,00

-1.029,00

Se invece lancio:

trial_start_balance.php

<?php
require 'start_balance.php';
$dipu_p=2;
$diba_p=12;
$data_last_bal='2007-9-20';
echo start_balance($dipu_p,$diba_p,$data_last_bal);
?>

ottengo:

Saldo=-123.00Saldo_progressivo=-123

Saldo=-100.00Saldo_progressivo=-223

Saldo=-120.00Saldo_progressivo=-343

Saldo=-12.00Saldo_progressivo=-355

Saldo=-123.12Saldo_progressivo=-478.12

Saldo=-12.00Saldo_progressivo=-490.12

Saldo=-124.00Saldo_progressivo=-614.12

Saldo=-112.00Saldo_progressivo=-726.12

Saldo=-101.00Saldo_progressivo=-827.12

Saldo=-101.00Saldo_progressivo=-928.12

Saldo=-101.00Saldo_progressivo=-1029.12

-1029.12

Sembrerebbe che con l'uso di number_format() all'interno start_balance3.php causi la perdita dei decimali,

Si può usare qualche altro sistema per la formattazione delle cifre in questo caso, o cos'altro?

Grazie per l'attenzione

Amos

inviato 9 anni fa
amosse
X 0 X

Il problema è causato da questa istruzione:

$fin_record_bal2 +=$row[fin_record_bal1];

infatti esegue una somma tra il numero $row[fin_record_bal1] e la STRINGA $fin_record_bal2 che hai appena creato formattando il numero. La somma non può essere immediatamente eseguita da PHP che prova a riconvertire la stringa in numero, ma i punti e le virgole non vengono correttamente interpretate perché non seguono lo standard inglese.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie della risposta.

Ho capito,

che tu sappia esiste qualche soluzione al problema?

Ciao

Amos

risposto 9 anni fa
amosse
X 0 X

Basta non mischiare le variabili che contengono i numeri veri e propri con le variabili che contengono i dati formattati.

$fin_record_bal1 = $row[fin_record_bal1];
$format_fin_record_bal1 = number_format($fin_record_bal1, 2, ',', '.');
$fin_record_bal2 +=$row[fin_record_bal1];
$format_fin_record_bal2 = number_format($fin_record_bal2, 2, ',', '.');
risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie del suggerimento,funziona perfettamente.

 ::)

risposto 9 anni fa
amosse
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda