0

Tengo una función Cart::total() que devuelve el siguiente número:

introducir la descripción de la imagen aquí

Con el número retornado estoy intentando hacer la siguiente la operación:

(Cart::total() + 100);

Pero causa el siguiente error:

Error: A non-numeric value encountered

10
  • Te está diciendo que uno de los valores no es numérico, el cual probablemente sea Cart::total. Te sugiero rescatar el valor en una variable, confirmar el tipo obtenido y cambiarlo a un numérico. Ahora mismo, no se si tu valor es string o double, además que viene con una coma.
    – Excorpion
    Commented el 31 may. a las 6:24
  • @Excorpion el valor de cart es "4,506.04", nos si interfiere que venga con "" Commented el 31 may. a las 6:27
  • No es lo que importa. Claramente "100" es un valor numérico insertado directamente. Usa gettype para ver que valor es Cart::total - php.net/manual/en/function.gettype.php
    – Excorpion
    Commented el 31 may. a las 6:32
  • @Excorpion gttype me da: "string", puedo convertirlo con float, pero me arroja un valor que no es, de 4,506.04 pasa a 4. Commented el 31 may. a las 6:42
  • 4
    4.506 es 4 con 506 -> 4 + 100 = 104. No veo que el resultado sea incorrecto. Tu número debería ser 4506.04, no cualquier otra cosa... lo bonito de las matemáticas es que son siempre constantes. 1 + 1 siempre son dos! Ahora, si tú intentas inventarte el cómo introduces un número y pretendes que las matemáticas funcionen igual que si respetas sus reglas... pues no, claramente no va a funcionar. 4.506 NO es 4506.04, ni siquiera es 4506. Repito, estás confundiendo la REPRESENTACIÓN de un número con su valor. 4506 es cuatro mil quinientos seis, 4.506 es 4 y medio (aprox)
    – Benito-B
    Commented el 31 may. a las 8:08

1 respuesta 1

1

el error que estas experimentando se refiere a que estas intentando hacer una suma de 100 a un elemento que es una string por eso que en el echo que has hecho aparece entre "" y el error en español seria algo como: no se ha encontrado un valor numerico porque Cart::total() no lo devuelve con int sino como str Para solucionar esto puedes parsear el numero que devuelve esta funcion con algo como esto:

$total = "4,506.04"; // Este sería el valor devuelto por Cart::total()

$total = str_replace(",", "", $total); // Elimina la coma

// Ahora, $total debería ser un número válido
if (is_numeric($total)) {
    $totalNumeric = (float)$total;
    $result = $totalNumeric + 100;
    echo $result; // Este será el resultado de la operación matemática
} else {
    echo "Error: El valor de total no es numérico.";
}

Con esto el resultado seria el esperado: 4506.04+100=4606.04

PD: Recuerda hacer preguntas con un poco de mas contexto quizás podías haber subido la función de Cart::total() y te podemos ayudar mucho mejor, ya que este código no debería estar fuera o después de la función si no que la función debería retornar exactamente lo que tu necesitas que en este caso intuyo que sera un 4506.04 recuerda que el punto indica cuando empieza los decimales en cualquier sistema informático

1
  • 1
    Solo como contexto, no es necesario que suba Cart::total(), dado que no es parte del problema en realidad. El problema es la lógica detrás de que un valor numérico, sea trabajado como str en vez de int. En este caso, basta decirle que revise dicha función, y no retorne valor numéricos como str.
    – Excorpion
    Commented el 31 may. a las 12:24

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.