Pregunta

Quiero utilizar la función number_format en PHP. Por ejemplo:

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

Esto funciona para los números flotantes pero quiero utilizarlo para diferentes números. Si es un número decimal y no tiene ningún punto flotante, se muestra como: 145.00. ¿Cómo puedo arreglar esto? Quiero decir que quiero mostrar la mayor cantidad de puntos flotantes, según sea necesario, no más.

¿Fue útil?

Solución 2

Creo que no puedo conseguir lo que quiero de Number_format así que hice esto y funciona bien:

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

Gracias a todos por sus respuestas.

Otros consejos

Investigar las funciones printf y sprintf en lugar de number_format.

Se dan la capacidad para dar formato a los números como desee.

printf("%d", $int) 

sería apropiado para un entero decimal.

printf("%4.2f", $float) 

sería apropiado para un número de coma flotante con dos cifras decimales.

number_format parece estar destinado a la internacionalización de la producción de la moneda, pero no creo que eso es lo que quiere porque usted ha mencionado números decimales 'todo'.

No sé una mejor manera de hacer esto, pero se puede comparar el tipo, al igual que el código de abajo:

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

Mientras que es un poco rápido y sucio, simplemente podría hacer una ...

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

lejos de ser ideal, pero eficaz.

Creo que el problema clave es definir la forma en que se necesitan muchas posiciones. Definiría como 13,01 13 porque el primero era un decimal 0? Desde printf y formato de número que necesita saber cuántos decimales, no sé que habría que trabajar para usted.

Tal vez algo como esto (lo cual es una gran cantidad de funciones, pero busca el primer 0, y luego devuelve la cadena truncada). Si, es intensa, pero puede ser la mejor manera para usted.

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.');

Yo uso el siguiente para deshacerse de los ceros finales:

// 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)

le dará el punto correcto flotante ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top