with solo round redondeo redondear numero mostrar limitar evitar decimals decimales controlar cantidad php numbers decimal

solo - Elimina los cero dígitos inútiles de los decimales en PHP



php round 2 decimals with zero (18)

Este Código eliminará el cero después del punto y devolverá solo dos dígitos decimales.

$ number = 1200.0000;
str_replace (''. 00'', '''', number_format ($ number, 2, ''.'', ''''));

La salida será: 1200

Estoy tratando de encontrar una forma rápida de eliminar zero decimals de valores numéricos como este:

echo cleanNumber(''125.00''); // 125 echo cleanNumber(''966.70''); // 966.7 echo cleanNumber(844.011); // 844.011

¿Existe alguna manera optimizada para hacer eso?


Debes lanzar tus números como flotadores, lo que hará esto por ti.

$string = "42.422005000000000000000000000000"; echo (float)$string;

La salida de esto será lo que estás buscando.

42.422005


Debido a esta pregunta es viejo. Primero, lo siento por esto.

La pregunta es sobre el número xxx.xx, pero en el caso de que sea x, xxx.xxxxx o separador decimal de diferencia, como xxxx, xxxx, puede ser más difícil encontrar y eliminar cero dígitos del valor decimal.

/** * Remove zero digits from decimal value. * * @param string|int|float $number The number can be any format, any where use in the world such as 123, 1,234.56, 1234.56789, 12.345,67, -98,765.43 * @param string The decimal separator. You have to set this parameter to exactly what it is. For example: in Europe it is mostly use "," instead of ".". * @return string Return removed zero digits from decimal value. */ function removeZeroDigitsFromDecimal($number, $decimal_sep = ''.'') { $explode_num = explode($decimal_sep, $number); if (is_array($explode_num) && isset($explode_num[count($explode_num)-1]) && intval($explode_num[count($explode_num)-1]) === 0) { unset($explode_num[count($explode_num)-1]); $number = implode($decimal_sep, $explode_num); } unset($explode_num); return (string) $number; }

Y aquí está el código para la prueba.

$numbers = [ 1234,// 1234 -1234,// -1234 ''12,345.67890'',// 12,345.67890 ''-12,345,678.901234'',// -12,345,678.901234 ''12345.000000'',// 12345 ''-12345.000000'',// -12345 ''12,345.000000'',// 12,345 ''-12,345.000000000'',// -12,345 ]; foreach ($numbers as $number) { var_dump(removeZeroDigitsFromDecimal($number)); } echo ''<hr>''."/n/n/n"; $numbers = [ 1234,// 12324 -1234,// -1234 ''12.345,67890'',// 12.345,67890 ''-12.345.678,901234'',// -12.345.678,901234 ''12345,000000'',// 12345 ''-12345,000000'',// -12345 ''12.345,000000'',// 12.345 ''-12.345,000000000'',// -12.345 ''-12.345,000000,000'',// -12.345,000000 STRANGE!! but also work. ]; foreach ($numbers as $number) { var_dump(removeZeroDigitsFromDecimal($number, '','')); }


Esa es mi pequeña solución ... Se puede incluir en una clase y establecer vars

private $ dsepparator = ''.''; // decimales private $ tsepparator = '',''; // mil

Eso se puede establecer por el constructor y cambiar a lang de los usuarios.

class foo { private $dsepparator; private $tsepparator; function __construct(){ $langDatas = [''en'' => [''dsepparator'' => ''.'', ''tsepparator'' => '',''], ''de'' => [''dsepparator'' => '','', ''tsepparator'' => ''.'']]; $usersLang = ''de''; // set iso code of lang from user $this->dsepparator = $langDatas[$usersLang][''dsepparator'']; $this->tsepparator = $langDatas[$usersLang][''tsepparator'']; } public function numberOmat($amount, $decimals = 2, $hideByZero = false) { return ( $hideByZero === true AND ($amount-floor($amount)) <= 0 ) ? number_format($amount, 0, $this->dsepparator, $this->tsepparator) : number_format($amount, $decimals, $this->dsepparator, $this->tsepparator); } /* * $bar = new foo(); * $bar->numberOmat(''5.1234'', 2, true); // returns: 5,12 * $bar->numberOmat(''5'', 2); // returns: 5,00 * $bar->numberOmat(''5.00'', 2, true); // returns: 5 */ }


Esto es lo que uso:

function TrimTrailingZeroes($nbr) { return strpos($nbr,''.'')!==false ? rtrim(rtrim($nbr,''0''),''.'') : $nbr; }

NB Esto asume . es el separador decimal Tiene la ventaja de que funcionará en números arbitrariamente grandes (o pequeños) ya que no existe un molde flotante. Tampoco convertirá los números en notación científica (p. Ej., 1.0E-17).


Extraño, cuando obtengo un número de la base de datos con un tipo "flotante" y si mi número es ex. 10000 cuando lovalto, se convierte en 1.

$number = $ad[''price_month'']; // 1000 from the database with a float type echo floatval($number); Result : 1

He probado todas las soluciones anteriores, pero no funcionó.


Manera complicada pero funciona:

$num = ''125.0100''; $index = $num[strlen($num)-1]; $i = strlen($num)-1; while($index == ''0'') { if ($num[$i] == ''0'') { $num[$i] = ''''; $i--; } $index = $num[$i]; } //remove dot if no numbers exist after dot $explode = explode(''.'', $num); if (isset($explode[1]) && intval($explode[1]) <= 0) { $num = intval($explode[0]); } echo $num; //125.01

las soluciones anteriores son la forma óptima, pero en caso de que quiera tener la suya, podría usarla. Lo que hace este algoritmo comienza al final de la cadena y comprueba si es 0 , si se establece en cadena vacía y luego va al siguiente carácter desde atrás hasta que el último carácter sea > 0


Para todos los que llegan a este sitio y tienen el mismo problema con los comas, pueden cambiar:

$num = number_format($value, 1, '','', '''');

a

$num = str_replace('',0'', '''', number_format($value, 1, '','', '''')); // e.g. 100,0 becomes 100

Esto me ayudó, y creo que no estoy solo.

Si hay dos ceros para eliminar:

a

$num = str_replace('',00'', '''', number_format($value, 2, '','', '''')); // e.g. 100,00 becomes 100

Más aquí: Número de PHP: punto decimal visible solo si es necesario


Puedes usar:

print (floatval)(number_format( $Value), 2 ) );


Si desea eliminar los dígitos cero justo antes para mostrar en la página o plantilla.

Puede usar la función sprintf()

sprintf(''%g'',''125.00''); //125 ‌‌sprintf(''%g'',''966.70''); //966.7 ‌‌‌‌sprintf(''%g'',844.011); //844.011


Simplemente agregando + a su variable de cadena provocará que el tipo de transmisión (flotante) y elimine ceros:

echo +''125.00''; // 125 echo +''966.70''; // 966.7 echo +844.011; // 844.011 var_dump(+''844.011asdf''); // double(844.011)


Tenga cuidado al agregar +0.

echo number_format(1500.00, 2,".",",")+0; //1

El resultado de esto es 1.

echo floatval(''1,000.00''); // 1 echo floatval(''1000.00''); //1000


Typecast a un float .

$int = 4.324000; $int = (float) $int;


puedes usar la función floatval

echo floatval(''125.00''); // 125 echo floatval(''966.70''); // 966.7 echo floatval(''844.011''); // 844.011


$num + 0 hace el truco.

echo 125.00 + 0; // 125 echo ''125.00'' + 0; // 125 echo 966.70 + 0; // 966.7

Internamente, esto es equivalente a fundir para flotar con (float)$num o floatval($num) pero lo encuentro más simple.


$str = 15.00; $str2 = 14.70; echo rtrim(rtrim(strval($str), "0"), "."); //15 echo rtrim(rtrim(strval($str2), "0"), "."); //14.7


$value = preg_replace(''~/.0+$~'','''',$value);


$x = ''100.10''; $x = preg_replace("//.?0*$/",'''',$x); echo $x;

No hay nada que no se pueda arreglar con una simple expresión regular;)

http://xkcd.com/208/