Foros del Web » Programando para Internet » Javascript »

:si: el punto forma parte del numero:'(

Estas en el tema de :si: el punto forma parte del numero:'( en el foro de Javascript en Foros del Web. estoy haciendo una tabla que calcula la multiplicacion de dos numeros y utilizo un codigo que tome de este foro para colocar los separadores mientras ...
  #1 (permalink)  
Antiguo 10/01/2007, 13:17
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
:si: el punto forma parte del numero:'(

estoy haciendo una tabla que calcula la multiplicacion de dos numeros y utilizo un codigo que tome de este foro para colocar los separadores mientras se escribe. #.###,##

ahora en el pais de donde soy de Venezuela el separador de decimales es la coma y no el punto(el punto es separador de miles) #.###,##

el detalle esta en que javascript solo toma un solo separador, el de decimales y para rematar no es la coma sino el punto. ####.##
lo estoy haciendo asi...

vcantidad = parseFloat(doc.elements[pfj_name + "1"].value);
vfact = doc.elements[pfj_name + "3"].value;
vfactura = vfact.replace(/\./g,'');
vfacturado = vfactura.replace(/\,/g,'.');
vtotal = vfacturado * vcantidad;
doc.elements[pfj_name + "4"].value = vtotal;

estas son los campos de donde se toman los datos
cantidad = (doc.elements[pfj_name + "1"].value)
facturado = (doc.elements[pfj_name + "3"].value)

esta es el campo donde se coloca el total resultante
total = (doc.elements[pfj_name + "4"].value)

esto me da el resultado bien asi: ####.##
pero como les dije ahora debo hacer una mascara para mostrarlo de acuerdo al formato de cada pais
quien podria ayudarme a hacerlo????
  #2 (permalink)  
Antiguo 10/01/2007, 17:25
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: :si: el punto forma parte del numero:'(

Hablamos de ello hace unos días. Con una línea de script conseguirás pasar al formato de puntos entre miles y coma para decimales:
http://www.forosdelweb.com/f13/sumar-decimales-454072/
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 11/01/2007, 13:04
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: :si: el punto forma parte del numero:'(

hola gracias por la ayuda
algunas dudas....
en el foro que me enviaste para yudarme puedo entender las modificaciones que hace karlankas pero las ultimas que haces tu no entiendo nada nadita nada no se si va dentro del codigo de que hace karlankas o el que tu muestras lo resume todo.

como podria hacer la rutina mas generica, es decir, que sirva aun cuando el usuario quiera los puntos y coma como separadores de miles y decimales respectivamente, como tambien cuando las comas y el punto sean separador de miles y decimales respectivamente

te lo agradeceria....
  #4 (permalink)  
Antiguo 11/01/2007, 16:41
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: :si: el punto forma parte del numero:'(

Sí, verás:

En mi primer script, que lo hace todo el solito, no es complementario al de karlankas:
Código PHP:
var nos=["4.532,234","55,56002","541.867,078"];

function 
formato_PC(n) {
    return 
Numbern.replace(/./g,"").replace(/,/g,".") );
}
function 
formato_HUM(n) {
    
n=String(n).split(".");        //el entero es n[0] y la parte decimal es n[1]
    
n[0]=n[0].split("").reverse().join("");        //le damos la vuelta, asi podemos tocarlo desde atras sin complicaciones
    
n[0]=n[0].replace(/(d{3})(?=d)/g,"$1.");        
    
//ver comentario abajo
    
n[0]=n[0].split("").reverse().join("");        //lo reestablecemos a su orden original
    
return n.join(",");        //unimos la parte entera con la decimal
}

function 
suma(arr) {
    var 
total=0;
    for(var 
i=0;i<arr.length;i++)
        
total+=formato_PC(arr[i]);
    return 
formato_HUM(total);
}

document.writesuma(nos) ); 
que es igual al último sólo que sin ahorrar código, utilizo lo que tú has posteado:
vfactura = vfact.replace(/\./g,'');
vfacturado = vfactura.replace(/\,/g,'.');
pero en una sola línea:
Number( n.replace(/./g,"").replace(/,/g,".") );

La función formato_PC transforma un número ##.###.###,## en ########.##, formato en el cual javascript puede operar. Además devuelve ya transformado en el tipo Number, con lo cual ninguna restricción.

La función formato_HUM transforma un número de formato_PC ########.## a formato "humano", es decir, al original ##.###.###,##

La función suma no sé si te interesa, es para sumar todos los números del array si están en formato_PC, no tiene mayor complicación.


Si deseas que funcione al revés (es decir, no ##.###,## sino ##,###.##) únicamente deberás cambiar estas líneas en formato_hum:
Código PHP:
n[0]=n[0].replace(/(d{3})(?=d)/g,"$1."); 
por
Código PHP:
n[0]=n[0].replace(/(d{3})(?=d)/g,"$1,");       //lo mismo pero con , después de $1 
y la línea que une a los grupos de entero y decimal, ésta:
Código PHP:
return n.join(","); 
por
Código PHP:
return n.join("."); 
Luego podrías mejor currarte unos argumentos para formato_hum para andarte con menos complicaciones ¿no?


Si no entiendes alguna expresion regular y estás interesado y no puedes encontrar información vuelve a preguntar sin problemas.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 12/01/2007, 10:26
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: :si: el punto forma parte del numero:'(

gracias por tu ayuda lo unico malo es que puedo ver que soy un simple novato en esto de javascript y necesito con suma urgencia estudiarlo a fondo jejejeje

nos=["4.532,234","55,56002","541.867,078"];
puedo poner en ves de cifras nombres de campos a los que yo le ingreso los valores o me equivoco???
  #6 (permalink)  
Antiguo 12/01/2007, 12:34
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: :si: el punto forma parte del numero:'(

No, nombres de campos no podrías poner ahí. Ahí podrías poner sólo números. Por ejemplo el valor de un campo:

document.getElementsByName["nombreDeCampo"][0].value

y en nombreDeCampo pones tu nombre de camp y donde esta el 0 pones el índice del campo si hay varios campos con ese mismo nombre. Esta línea correspondería al contenido de:

<input type="text" name="nombreDeCampo" />
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 13/01/2007, 08:36
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: :si: el punto forma parte del numero:'(

una ultima consulta
en que evento y objeto disparo las funciones o se dispara una sola funcion que hace que las demas rutinas se generen
gracias
  #8 (permalink)  
Antiguo 16/01/2007, 12:19
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: :si: el punto forma parte del numero:'(

epas derkenuke gracias por la ayuda...
oye estuve tratando de implantar el codigo que me facilitaste pero no logro hacer que funcione, asi que he estado trabajando con el codigo de Karlankas pero me interesaria simplificar el procedimiento. la funcion sumar es la que genera todo el procedimiento, no es necesario agregarle nada al evento???

  #9 (permalink)  
Antiguo 16/01/2007, 15:19
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: :si: el punto forma parte del numero:'(

Todas las letras d dentro de las expresiones regulares tienen una contrabarra delante suyo, el sistema del foro impide que salgan. Son \d todas.

creo que mi problema radica en que no logro entender lo que dices aqui
porque he hecho pruebas pero nada

por favor agradesco tu ayuda

gracias...



  #10 (permalink)  
Antiguo 16/01/2007, 15:38
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: :si: el punto forma parte del numero:'(

No sé dónde puede estar tu problema porque no me posteas ningún código, pero bueno. La implantación a un formulario es muy sencilla:
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<
html>
<
head>
<
title> New Document </title>
</
head>

<
body>

N1 <input type="text" id="caja1" size="30" value="4.532,234" /><br />
N2 <input type="text" id="caja2" size="30" value="55,56002" /><br />
N3 <input type="text" id="caja3" size="30" value="541.867,078" /><br />
N4 <input type="text" id="caja4" size="30" value="58.795,65247" /><br />
<
input type="button" value="Resultado: " onclick="sumaTodos()" /> <input type="text" id="resultado" size="30">

<
script>


function 
formato_PC(n) {
    return 
Numbern.replace(/./g,"").replace(/,/g,".") );
}
function 
formato_HUM(n) {
    
n=String(n).split(".");        //el entero es n[0] y la parte decimal es n[1]
    
n[0]=n[0].split("").reverse().join("");        //le damos la vuelta, asi podemos tocarlo desde atras sin complicaciones
    
n[0]=n[0].replace(/(d{3})(?=d)/g,"$1.");        
    
//ver comentario abajo
    
n[0]=n[0].split("").reverse().join("");        //lo reestablecemos a su orden original
    
return n.join(",");        //unimos la parte entera con la decimal
}

function 
suma(arr) {
    var 
total=0;
    for(var 
i=0;i<arr.length;i++)
        
total+=formato_PC(arr[i]);
    return 
formato_HUM(total);


function 
sumaTodos() {
    var 
arr=new Array();
    for(var 
a=1a<=4a++) {
        
arr[arr.length]=document.getElementById("caja"+a).value;
    }
    
document.getElementById("resultado").value=suma(arr);
}

</script>


</body>
</html> 
No le veo mas complicación. Este podría ser un ejemplo valido para sumar todas las cajas.


Por supuesto me han vuelto a salir mal las expresiones regulares:
Una es esta:
return Number( n.replace(/\./g,"").replace(/,/g,".") );
Y la otra es:
n[0]=n[0].replace(/(\d{3})(?=\d)/g,"$1.");



Espero que así puedas arreglartelas.

Saludos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #11 (permalink)  
Antiguo 18/01/2007, 15:22
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: :si: el punto forma parte del numero:'(

este es un script que me facilito DERKENUKE para sumar cantidades con separadores de miles y decimales. y a pesar de que soy un poco nuevo en el Javascript le he hecho unas modificaciones para que funcione genericamente, es decir, en ciertos paises los separadores de miles son las comas y los de decimales son los puntos y en otros paises es al contrario los puntos son separadores de miles y las comas son separadores de decimales asi que a lo mejor le puede servir a alguien porque me he pasado como dos meses y medio tratando de sumar numeros asi hasta que en este foro logre encontrar la forma
saludos a todos
Código PHP:
<script languaje "Javascript">
function 
formato_PC(nsepMilsepDec) {
if(
sepMil == "."){
    return 
Numbern.replace(/./g,"").replace(/,/g,sepMil) );}
else{
    return 
Numbern.replace(/./g,sepDec).replace(/,/g,"") );}

function 
formato_HUM(nsepMilsepDecDecimales) { debugger;
       
n=n.toFixed(2);//el 2 equivale a la cantidad de decimales que se desee
    
n=String(n).split(".");         
    
n[0]=n[0].split("").reverse().join("");    
        if(
sepMil == "."){ 
               
n[0]=n[0].replace(/(d{3})(?=d)/g,"$1" sepMil); 
        }else{
            
n[0]=n[0].replace(/(d{3})(?=d)/g,"$1" sepDec); 
        }
        
n[0]=n[0].split("").reverse().join("");        
        if(
sepMil == "."){
               return 
n.join(",");}
        else{
            
n[0]=n[0].replace(/./g,",");
        return 
n.join(".");}         
        } 
//cuando se realizen los cambios de separadores deben tener el mismo orden 
function suma(arr) { 
    var 
total=0
    for(var 
i=0;i<arr.length;i++) 
        
total+=formato_PC(arr[i],'.',','); //cambiar aqui el orden de los separadores 
    
return formato_HUM(total,'.',',',2); //cambiar aqui el orden de los separadores
}  

function 
sumaTodos() {  
    var 
arr=new Array(); 
    for(var 
a=1a<=4a++) { 
        
arr[arr.length]=document.getElementById("caja"+a).value;
    }
    
document.getElementById("resultado").value=suma(arr); 

</script> 
  #12 (permalink)  
Antiguo 18/01/2007, 15:24
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: :si: el punto forma parte del numero:'(

ah se me olvido
gracias por tu ayuda Derkenuke
  #13 (permalink)  
Antiguo 18/01/2007, 17:44
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: :si: el punto forma parte del numero:'(

De nada.

Pero creo que te has complicado un pelín sin necesidad.

La funcion formato_PC no hay que modificarla porque transformar a formato PC es siempre la misma operación, no depende de cómo prefiera el usuario la salida.

La unica función que debes modificar es formato_HUM (y todas las que la llaman). Y tampoco hacen falta tantos condicionales que ensucien tanto el código, basta con sustituir allá donde tratemos los decimales con sepDec y hallá donde tratemos los miles con sepMil.

Además si lo haces con condicionales no podremos poner lo que queramos en sepDec y en sepMil, serán puntos o comas (la verdad es que no entiendo muy bien lo que has hecho ahí).

El ejemplo práctico:

Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<
html>
<
head>
<
title> New Document </title>
</
head>

<
body>

N1 <input type="text" id="caja1" size="30" value="4.532,234" /><br />
N2 <input type="text" id="caja2" size="30" value="55,56002" /><br />
N3 <input type="text" id="caja3" size="30" value="541.867,078" /><br />
N4 <input type="text" id="caja4" size="30" value="58.795,65247" /><br />
<
input type="button" value="Resultado: " onclick="sumaTodos('.','\'',2)" /> <input type="text" id="resultado" size="30">

<
script>


function 
formato_PC(n) {
    return 
Numbern.replace(/./g,"").replace(/,/g,".") );
}
function 
formato_HUM(nsepMilsepDecdecimales) {
    
n=n.toFixed(decimales);            // los decimales que queramos
    
n=String(n).split(".");        //el entero es n[0] y la parte decimal es n[1]
    
n[0]=n[0].split("").reverse().join("");        //le damos la vuelta, asi podemos tocarlo desde atras sin complicaciones
    
n[0]=n[0].replace(/(d{3})(?=d)/g,"$1"+sepMil);     //tratamos los miles
    
n[0]=n[0].split("").reverse().join("");        //lo reestablecemos a su orden original
    
return n.join(sepDec);        //unimos la parte entera con la decimal (tratamos los decimales)
}

function 
suma(arrsepMilsepDecdecimales) {
    var 
total=0;
    for(var 
i=0;i<arr.length;i++)
        
total+=formato_PC(arr[i]);
    return 
formato_HUM(totalsepMilsepDecdecimales);


function 
sumaTodos(sepMilsepDecdecimales) {
    var 
arr=new Array();
    for(var 
a=1a<=4a++) {
        
arr[arr.length]=document.getElementById("caja"+a).value;
    }
    
document.getElementById("resultado").value=suma(arrsepMilsepDecdecimales);
}

</script>


</body>
</html> 

Recuerda las contrabarras en las expresiones regulares.

La palabra debugger que hay después del { de formato_HUM tampoco la entiendo...


Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #14 (permalink)  
Antiguo 19/01/2007, 08:39
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: :si: el punto forma parte del numero:'(

que te puedo decir... sigo siendo nuevo en esto de javascript
saludos
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 10:46.