2010-11-06 27 views
46

me gustaría saber si existe alguna función para dar formato automáticamente un número por él es decimal, por lo que si tengo:PHP número: punto decimal visible sólo si es necesario

<?php 
    // $sql_result["col_number"] == 1,455.75 
    number_format ($sql_result["col_number"], 2, ".", ""); 
    // will return 1455.75 

    // $sql_result["col_number"] == 1,455.00 
    number_format ($sql_result["col_number"], 2, ".", ""); 
    // could I get 1455 instead of 1455.00? 
?> 

también lo es Si existe mi respuesta ¿Alguna manera de eliminar los decimales si tengo forma de datos DECIMAL en mi base de datos solo cuando es redonda?

O shoud, ¿hago algo como eso?

<?php 
    // $sql_result["col_number"] == 1,455.00 
    str_replace(".00", "", (string)number_format ($sql_result["col_number"], 2, ".", "")); 
    // will return 1455 
?> 
+1

Aquí hay una respuesta concisa: http://stackoverflow.com/a/14531760/1431728 – JohnK

+3

@ JohnK, me acabo de dar cuenta de que el enlace que le dio es también el que lo pidió el año pasado. Hahaha –

Respuesta

11

De hecho, creo que su solución alternativa es tan buena como cualquiera. Es simple y claro, y realmente no tiene sentido hablar sobre el rendimiento aquí, así que solo hazlo.

+5

Simplemente puede agregar 0 '1455.00 + 0' http://stackoverflow.com/questions/14531679/remove-useless-zero-digits-from-decimals-in-php –

+0

La solución de reemplazo se romperá con los números expresados ​​en europeo formato de países, como Alemania o España. Por ejemplo, 9,000 en Alemania es 9.000,00 y esto se convertirá en algo así como 90,00 – Cesc

8

Como Emil dice que los tuyos son buenos. Pero si quiere eliminar 0 de, p. 7.50 también, tengo una sugerencia, rtrim():

<?php 
    // if $sql_result["col_number"] == 1,455.50 
    rtrim(rtrim(number_format($sql_result["col_number"], 2, ".", ""), '0'), '.'); 
    // will return 1455.5 
?> 
+1

Creo que habrá un error al usar 'rtrim' en esta situación, por ejemplo,' rtrim ('1230.00', '0.'); 'Dará 123 en lugar de 1230. – bobo

+0

@bobo, Gracias, editado :) –

+0

V buena solución Halil..Gracias :) –

0

En realidad creo que la manera más limpia que se me ocurre hacer esto para alguien que acaba de hacer una búsqueda en busca de este tipo de cosas es hacer esto:

(number_format ($sql_result["col_number"], 2) * 100)/100; 
-1

¿Qué hay de

number_format($value,2) - 0; 
0

Warren.S respuesta me ayudó a salir. No necesitaba la función Number_format, por lo que acabo de hacer esta

$value=$value-0; 

Pero en el caso de la OP, que necesita Number_format para eliminar las comas. Así que esto funcionaría para él

$value=number_format ($sql_result["col_number"], 2, ".", "")-0; 
20

floatval o simplemente echando a flotar

php > echo floatval(7.00); 
7 
php > echo floatval(2.30); 
2.3 
php > echo floatval(1.25); 
1.25 
php > echo floatval(1.125); 
1.125 

php > echo (float) 7.00; 
7 
php > echo (float) 2.30; 
2.3 
php > echo (float) 1.25; 
1.25 
php > echo (float) 1.125; 
1.125 
+1

fundición para flotar es hasta ahora la mejor opción –

+4

Cualquier persona que quiera aplicar esto a una cadena debe tener en cuenta los valores con comas como " 1,000.99 "Flotante este valor devolverá 1. –

+0

floatval() funcionó para mí :) –

3

También es posible usar rtrim(), lo que eliminaría el exceso de 0s, en el caso en el que es posible que desee mantener una lugar decimal pero no el exceso de ceros. (Por ejemplo, 4.50 se convierte en 4.5.) También le permite cambiar la cantidad de decimales de 2 a cualquier otro número.

rtrim(rtrim((string)number_format($value, 2, ".", ""),"0"),"."); 

// 4.00 -> 4 
// 4.50 -> 4.5 
// 4.54000000 -> 4.54 (if you're doing more decimal places) 
0

Como no podía encontrar una solución flexible que escribió una función simple para obtener el mejor resultado:

function getValueFormattedWithMinimalDecimals($value, $max_decimals = 2, $dec_point = ',', $thousands_sep = '') { 
    $bestNumberOfDecimals = -1; 
    $decimal = 0; 
    while ($decimal <= $max_decimals) { 
     $bestNumberOfDecimals = $decimal; 
     $valueDecimals = number_format($value, $decimal); 
     if (floatval($value) == $valueDecimals) { 
      break; 
     } 
     $decimal++; 
    } 
    if($bestNumberOfDecimals > 0 && number_format($value, $bestNumberOfDecimals) == number_format($value, 0)) { 
     $bestNumberOfDecimals = 0; 
    } 

    return number_format($value, $bestNumberOfDecimals, $dec_point, $thousands_sep); 
} 
0

Si el idioma de la moneda estadounidense me gusta utilizar este método:

function moneyform($number, $symbol = true) { 
    return str_replace(".00", "", money_format(($symbol? '%.2n' : "%!n"), $number)); 
} 

moneyform(1300999); 
-->$1,300,999 

moneyform(2500.99); 
-->$2,500.99 

moneyform(2500.99, false); 
-->2,500.99 
Cuestiones relacionadas