Domanda

Voglio usare la funzione number_format in PHP. Ad esempio:

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

Questo funziona per numeri float ma voglio usarlo per numeri diversi. Se un numero è decimale e non ha alcun punto galleggiamento, mostra come: 145.00. Come posso risolvere questo problema? Voglio dire che voglio mostrare il maggior numero di punti mobili come necessario, non di più.

È stato utile?

Soluzione 2

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

 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.

Altri suggerimenti

Indagare le funzioni printf e sprintf invece di number_format.

Essi danno la possibilità di formattare i numeri come si desidera.

printf("%d", $int) 

sarebbe opportuno per un intero decimale.

printf("%4.2f", $float) 

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

number_format sembra essere destinato per l'internazionalizzazione della produzione di valuta, ma non credo che è quello che si vuole, perché lei ha citato i numeri decimali 'tutto'.

Non conosco 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;
}

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

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

lungi dall'essere ideale, ma efficace.

Credo che il problema chiave è la definizione di come sono necessarie molte posizioni. Ti definisci 13.01 come 13 perché la prima cifra decimale era un 0? Dal momento che printf e il formato numero che si ha bisogno di sapere quanti decimali, non so che che avrebbe funzionato per voi.

Forse qualcosa di simile (che è un sacco di funzioni, ma sembra per la prima 0, e poi restituisce la stringa troncata). Sì, è ad alta intensità, ma può essere il modo migliore per voi.

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
  }
}
rtrim(number_format($number, 2), '0.');

Io uso 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;
}
$x = $x - floor($x)

vi darà il giusto punto di galleggiamento ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top