{"id":120,"date":"2024-05-07T15:22:51","date_gmt":"2024-05-07T21:22:51","guid":{"rendered":"https:\/\/www.mariatech.com.mx\/blog\/?p=120"},"modified":"2026-05-18T15:50:58","modified_gmt":"2026-05-18T22:50:58","slug":"problema-al-comparar-2-numeros-en-php","status":"publish","type":"post","link":"https:\/\/www.mariatech.com.mx\/blog\/laravel-php\/problema-al-comparar-2-numeros-en-php\/","title":{"rendered":"Problema al comparar 2 n\u00fameros en PHP"},"content":{"rendered":"<h6>Descripci\u00f3n del problema<\/h6>\n<p>Se tiene una interfaz de lado cliente donde de manera autom\u00e1tica se realiza el c\u00e1lculo de un valor el cu\u00e1l maneja n\u00fameros flotantes, hasta aqu\u00ed todo bien, el problema viene cuando ese valor se env\u00eda por medio de Ajax al Backend para ser procesado, este valor viaja como tipo String y con 12 decimales despu\u00e9s del punto. Entonces\u00a0 cuando llega al servidor a\u00fan as\u00ed nosotros apliquemos un &#8220;(float)&#8221; o &#8220;floatval()&#8221; por alguna extra\u00f1a raz\u00f3n al momento de comparar ese valor con uno id\u00e9ntico en Backend nos indica que no son iguales, por ejemplo:<\/p>\n<p>$input_cliente: &#8220;25249.<span class=\"sf-dump-str\" title=\"18 characters\">629999999997<\/span>&#8220;<\/p>\n<p>$valor_backend: 25249.63<\/p>\n<p>Si nosotros aplicamos:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>$float_input = (float) $input_cliente;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">O aplicamos<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$float_input = floatval($input_cliente);<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>echo $input_cliente;<\/code><\/pre>\n\n\n<p>El valor de salida es el siguiente: 25249.63<\/p>\n<p>Pero si hacemos la comparaci\u00f3n:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>if ($float_input == $valor_backend){\necho \"Si son iguales\";\n} else {\necho \"No son iguales\";\n}<\/code><\/pre>\n\n\n<p>El valor de salida es: No son iguales<\/p>\n<p>Es muy probablemente que aunque s\u00ed nos da un valor de salida correcto por as\u00ed decirlo, internamente sigue conteniendo los decimales &#8220;extras&#8221; y por esta raz\u00f3n en la comparaci\u00f3n nos dice que no son iguales, pues bien, ahora la soluci\u00f3n&#8230;<\/p>\n<p>1- Desde la interfaz del cliente podemos convertir el valor que se env\u00eda al Backend con JavaScript:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>var input_cliente = valor.toFixed(2);<\/code><\/pre>\n\n\n<p>2- En el mismo Backend usando la funci\u00f3n &#8220;number_format&#8221; de la siguiente manera:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>$float_input = (float) number_format($input_cliente,2,\".\",\"\");<\/code><\/pre>\n\n\n<p>Si con esto no te funciona, puedes probar &#8220;castear&#8221; los datos primero a un mismo tipo como String y despu\u00e9s a Float:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>$float_valor_backend =  floatval((string) $valor_backend);\n$float_input = floatval((string) number_format($input_cliente,2,\".\",\"\"));<\/code><\/pre>\n\n\n<p>Si tienes este mismo problema usa cualquiera de las dos opciones y de paso dales un le\u00edda para saber que est\u00e1s haciendo, no solo copies y pegues.<\/p>\n<p>Recuerda que si te sirvi\u00f3 el contenido d\u00e9janos tu comentario bye.<\/p>\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Soluci\u00f3n al problema de comparar dos n\u00fameros flotantes, uno del frontend y el otro del backend en PHP<\/p>\n","protected":false},"author":1,"featured_media":258,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-120","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel-php"],"_links":{"self":[{"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/posts\/120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=120"}],"version-history":[{"count":0,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/posts\/120\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/media\/258"}],"wp:attachment":[{"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}