Foros del Web » Programando para Internet » PHP »

consulta sobre decimales con php

Estas en el tema de consulta sobre decimales con php en el foro de PHP en Foros del Web. Hola a todos: Mi pregunta es la siguiente tengo una multiplicación de dos variables: $a*$b La variable $b suele tener decimales y la introduce el ...
  #1 (permalink)  
Antiguo 26/04/2013, 03:47
b44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 142
Antigüedad: 18 años, 5 meses
Puntos: 0
consulta sobre decimales con php

Hola a todos:
Mi pregunta es la siguiente tengo una multiplicación de dos variables:
$a*$b
La variable $b suele tener decimales y la introduce el cliente, cuando introduce la variables con la notación inglesa 2.4 realiza la operación bien por ejemplo
$c = $a*$b
3600 = 1500*2.4
Pero cuando el cliente introduce la notación española 2,4 (con coma en vez de punto) el resultado es este
$c = $a*$b
3000 = 1500*2,4

He probado a formatear la variable $b number_format($numero, 2, ",", ".");
aunque he notado que el resultado da incorrecto.
¿Se puede formatear la variable para que indistintamente como la introduzca el cliente realice la operación correctamente?, es decir tanto si el cliente introduce 2.4 como 2,4 que realice la operación correctamente.
$c = $a*$b
3600 = 1500*2.4
Espero vuestros consejos.
  #2 (permalink)  
Antiguo 26/04/2013, 04:36
 
Fecha de Ingreso: junio-2008
Mensajes: 93
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: consulta sobre decimales con php

Como idea te propongo que antes de hacer la multiplicación hagas un replace de "," por "."

Puedes utilizar la función str_replace de PHP para ello.

Suerte!
  #3 (permalink)  
Antiguo 26/04/2013, 10:06
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: consulta sobre decimales con php

Complementando la idea de colomer23 usa str_replace para cambiar la coma por punto, realizas la operación y si después deseas añadirle la coma para efectos de visualización más clara ahi si uses number_format.

Yo aprendi de una manera muy dolorosa que number_format no permite hacer operaciones aritmeticas(esos trabajos en los cuales sabes a que horas entras pero no a que hora sales y lo descubri solo un día antes de la entrega afortunadamente).

Infortunadamente en el manual esa advertencia no aparece y uno paga la novatada
__________________
Blog de humor http://elcuasatar.net63.net/
  #4 (permalink)  
Antiguo 29/04/2013, 03:38
b44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 142
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: consulta sobre decimales con php

Bueno siguiendo con el hilo, ahora me lo cambia

Código:
$_POST['ipc'] = str_replace(',','.',$_POST['ipc']);
pero no entiendo muy bien como funciona.
Porque parece que cambia de izquierda a derecha. Si por ejemplo escribo 0,3 funciona correctamente, pero si escribo 1.200,3 como se escribiría en castellano me recoge este numero 1.200.3 y me multiplica por 1.2
si pongo este me escribe todo con comas

Código:
$_POST['ipc'] = str_replace('',',',$_POST['ipc']);
No logro entender que funcione para 1.200,3 - 0,3 - 1200,3 -0.3 1,200.3 .He leído en el manual de php pero no logro encontrar la solución. Si alguien me puede aclarar se lo agradezco.
  #5 (permalink)  
Antiguo 29/04/2013, 05:49
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: consulta sobre decimales con php

Pues es un poco de sentido comun. Si se tiene un número como 1,200.3 tienes un punto y una coma. Ahora mismo no recuerdo el nombre de la función que permite encontrar una subcadena y el número donde aparece dentro de la cadena. (Buscala por tu cuenta) Si llega a encontrar un punto y una coma simplemente le dices que quite la coma (La reemplazas por "" que significa nada). Si solo encuentra una coma que la reemplace por un punto y finalmente si encuentra un punto que no haga nada. Si existiera varios puntos te tocaria que eliminara todos menos el ultimo que seria el de los decimales. Si encontraras números negativos igualmente le buscas el signo menos, se lo quitas y lo multiplicas por -1. Igual puede que se me escape algunos casos pero la idea es que crees condicionales según cada situación.

Busca en el manual la función que te comento, en el apartado de funciones de cadenas la encontraras.

p.s. Por ultimo y lo mas importante, debes asegurarte que los datos que manejas no son tipo cadena sino numericos, por tanto si es necesario reeemplazas las comas por puntos pero al final debes convertir los valores a numericos, sino las posibilidades de cometer un error de calculo son mayores.
__________________
Blog de humor http://elcuasatar.net63.net/

Última edición por cuasatar; 29/04/2013 a las 06:13

Etiquetas: variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:49.