with solo round redondear mostrar money_format money floatval float decimals decimales php string automation integer

solo - php round 2 decimals with zero



NĂºmero PHP: punto decimal visible solo si es necesario (10)

Agrego el artículo Quite los cero dígitos inútiles de los decimales en PHP como una forma más agradable de limpiar el valor sin decimales sueltos si es necesario.

Me gustaría saber si existe alguna función para formatear automáticamente un número por su decimal, así que si tengo:

<?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? ?>

así que mi respuesta es si existe alguna manera de eliminar los decimales si tengo forma de datos DECIMAL en mi base de datos solo cuando es redonda.

¿O debería hacer 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 ?>


Como Emil dice que los tuyos son buenos. Pero si quiere eliminar 0 de, por ejemplo, 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 ?>


Como no pude encontrar una solución flexible, escribí 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); }


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.


En realidad, creo que la manera más limpia en que puedo pensar para 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;


La respuesta de Warren.S me ayudó. No necesitaba la función number_format, así que acabo de hacer esto

$value=$value-0;

Pero en el caso del OP, necesita number_format para eliminar las comas. Entonces esto funcionaría para él

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


Qué pasa

number_format($value,2) - 0;


Si tiene como objetivo la moneda estadounidense, me gusta usar 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


También podría usar rtrim (), que eliminaría los 0 excesivos, en el caso en que desee mantener un decimal pero no los ceros excedentes. (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)


floatval o simplemente fundición para 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