2009-11-14 20 views
7

Quiero usar la función number_format en PHP. Por ejemplo:Formato del número de punto flotante

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

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

+0

¿Ha intentado utilizar redonda () en lugar de number_format()? –

+0

Según tengo entendido, number_format solo se debe usar para la visualización. – kta

Respuesta

6

creo que no puedo conseguir lo que quiero de Number_format por lo que hice 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.

+2

Puede acortar eso y escribir: 'list ($ left, $ right) = explode ('.', $ Number, 2);'. –

11

Investigue las funciones printf y sprintf en lugar de number_format.

le 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 punto flotante con dos decimales.

number_format parece estar destinado a la internacionalización de la salida de divisas, pero no creo que eso es lo que quiere porque mencionó números "enteros" decimales.

3

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; 
} 
+0

Creo que es la forma preferida si no necesita imprimir esto. – Dewsworld

2

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

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

Lejos de ser ideal, pero efectivo.

1

creo que el problema clave es definir la forma en que se necesitan muchas posiciones. ¿Definiría 13.01 como 13 porque el primer decimal era un 0? Como printf y el formato numérico necesitan que sepas cuántos decimales, no sé si eso funcionará para ti.

Tal vez algo como esto (que es una gran cantidad de funciones, pero busca el primer 0, y luego devuelve la cadena truncada). Sí, es intensivo, pero puede ser la mejor manera para ti.

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

que utilizar el siguiente para deshacerse de ceros a la derecha:

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

le dará el punto flotante derecha ...

Cuestiones relacionadas