2009-11-14 29 views
7

Desidero utilizzare la funzione number_format in PHP. Ad esempio:Formato numero in virgola mobile

$number = 234.51; 
echo number_format($number,2); 

Questo funziona per i numeri float ma voglio usarlo per numeri diversi. Se un numero è decimale e non ha punti mobili, mostra: 145.00. Come posso risolvere questo? Voglio dire che voglio mostrare tanti punti galleggianti se necessario, non di più.

+0

Hai provato a usare round () invece di number_format()? –

+0

A mio avviso, number_format deve essere utilizzato solo a scopo di visualizzazione. – kta

risposta

6

penso non riesco a ottenere quello che voglio da number_format così ho fatto questo e funziona bene:

public function floatNumber($number) 
{ 
     $number_array = explode('.', $number); 
     $left = $number_array[0]; 
     $right = $number_array[1]; 
     return number_format($number, strlen($right)); 
} 

Ringraziamo tutti per le vostre risposte.

+2

Puoi accorgerlo e scrivere: 'lista ($ sinistra, $ destra) = esploda ('.', $ Numero, 2);'. –

11

Esaminare le funzioni printf e sprintf anziché number_format.

Essi danno la possibilità di formattare i numeri come desiderato.

printf("%d", $int) 

sarebbe appropriato per un numero intero decimale.

printf("%4.2f", $float) 

sarebbe appropriato per un numero in virgola mobile con due cifre decimali.

number_format sembra essere inteso per l'internazionalizzazione dell'output di valuta, ma non penso che sia quello che vuoi perché hai citato i numeri "interi" decimali.

3

non so un modo migliore per fare questo, ma è possibile confrontare il tipo, come il codice qui sotto:

$number = 234.159; 
if(is_float($number)) { 
echo number_format($number, 2); 
}else { 
echo $number; 
} 
+0

Credo che sia il modo preferito se non è necessario stampare questo. – Dewsworld

2

Mentre è un po 'veloce e sporco, si può semplicemente fare un ..

str_replace('.00', '', number_format($potentialFloat, 2)); 

Lontano dall'ideale, ma efficace.

1

Penso che il problema chiave sia la definizione di quante posizioni sono necessarie. Definiresti 13,01 come 13 perché il primo decimale era uno 0? Dal momento che printf e il formato numerico ti richiedono di sapere quanti decimali, non so che questo potrebbe funzionare per te.

Forse qualcosa del genere (che è un sacco di funzioni, ma cerca il primo 0, e quindi restituisce la stringa troncata). Sì, è intenso, ma potrebbe essere il modo migliore per te.

function show_number($number, $max = 8){ 
    if(strpos($number, '.')){ 
    $decimal = strpos($number, '.'); 
    if(strpos($number, '.0')){ 
     return substr($number, 0, $decimal);//returns whole if zero is first 
    } else { 
     if(strpos(substr($number, $decimal, $max), '0')){ 
     $zero = strpos(substr($number, $decimal, $max), '0'); 
     return substr($number, 0, $decimal+$zero);//returns number w/0 first zero 
     } else { 
     return substr($number, 0, $decimal+$max+1); //returns number with max places 
     } 
    } 
    } else { 
    return $number; //returns number if no decimals 
    } 
} 
1
rtrim(number_format($number, 2), '0.'); 
0

utilizzare il seguente per sbarazzarsi di zeri finali:

// Trims a floating point number so there are no trailing zeros. For example: 
// 1.00 -> 1 
// 1.10 -> 1.1 
function trimFloatingPoint($input) { 
    $strNum = strval($input); 

    while(substr($strNum, -1, 1) == '0') 
     $strNum = substr($strNum, 0, strlen($strNum) -1); 

    // Trailing zeros are gone. How about the trailing period? 
    if(substr($strNum, -1, 1) == '.') 
     $strNum = substr($strNum, 0, strlen($strNum) -1); 

    return $strNum; 
} 
0
$x = $x - floor($x) 

vi darà la virgola mobile a destra ...

Problemi correlati