sexto punto primaria periodico pasar para numeros numero fracciones fraccion ejercicios ejemplos decimales convertir como coma php

php - primaria - Convertir un número con coma como punto decimal para flotar



numeros decimales (7)

Tengo una lista de precios con una coma para un punto decimal y un punto como el separador de mil.

Algunos ejemplos:

12,30
116,10
1.563,14

Estos vienen en este formato de un tercero. Quiero convertirlos en flotadores y agregarlos juntos.

¿Cuál es la mejor manera de hacer esto? number_format no parece funcionar con este formato, y str_replace parece excesivo, ya que tengo que hacerlo más de una vez en cada número.

¿Hay una mejor manera? Gracias.


Esta función es compatible con números con puntos o comas como decimales

function floatvalue($val){ $val = str_replace(",",".",$val); $val = preg_replace(''//.(?=.*/.)/'', '''', $val); return floatval($val); } $number = "1.325.125,54"; echo floatvalue($number); // The output is 1325125.54 $number = "1,325,125.54"; echo floatvalue($number); // The output is 1325125.54


Puede parecer excesivo pero convertirá cualquier formato dado sin importar la configuración regional:

function normalizeDecimal($val, int $precision = 4): string { $input = str_replace('' '', '''', $val); $number = str_replace('','', ''.'', $input); if (strpos($number, ''.'')) { $groups = explode(''.'', str_replace('','', ''.'', $number)); $lastGroup = array_pop($groups); $number = implode('''', $groups) . ''.'' . $lastGroup; } return bcadd($number, 0, $precision); }

Salida:

.12 -> 0.1200 123 -> 123.0000 123.91 -> 12345678.9100 123 456 78.91 -> 12345678.9100 123,456,78.91 -> 12345678.9100 123.456.78,91 -> 12345678.9100 123 456 78,91 -> 12345678.9100



Si está utilizando PHP5.3 o superior, puede usar numfmt_parse para hacer "un numfmt_parse de número invertido". Si no lo eres, te quedaste con reemplazar las ocurrencias con preg_replace / str_replace.


Suponiendo que están en un archivo o matriz, simplemente reemplace como un lote (es decir, de una sola vez):

$input = str_replace(array(''.'', '',''), array('''', ''.''), $input);

y luego procese los números a partir de ahí aprovechando al máximo la naturaleza de PHP sin tipeo.


del manual de PHP:

str_replace - Reemplaza todas las ocurrencias de la cadena de búsqueda con la cadena de reemplazo

Me gustaría ir por esa ruta, y luego convertir de cadena a flotante - floatval


Usar str_replace() para eliminar los puntos no es excesivo.

$string_number = ''1.512.523,55''; // NOTE: You don''t really have to use floatval() here, it''s just to prove that it''s a legitimate float value. $number = floatval(str_replace('','', ''.'', str_replace(''.'', '''', $string_number))); // At this point, $number is a "natural" float. print $number;

Esta es, casi con certeza, la manera menos intensiva de CPU que puede hacer esto, y es probable que, incluso si utiliza alguna función elegante para hacerlo, eso es lo que hace bajo el capó.