Quitar punto separador de miles, pero no el de decimales

574 views
Skip to first unread message

Emil

unread,
Apr 4, 2016, 5:06:49 PM4/4/16
to Comunidad de Visual Foxpro en Español
Hola de nuevo, una pregunta corta, pero no menos complicada... al menos para mí.

Necesito elilminar el punto separador de miles (.) pero no el de decimales. 

Es decir, los valores de los importes que hasta ahora me muestra de este modo: "1.895.25" (con separador de miles y decimales con punto), que me quite solo el de miles que quede el número así: 1895.25

¿hay alguna función específica para esto?

El transform() lo he probado pero no lo cambia.

¿Alguna sugerencia?

Jean Pierre Adonis De La Cruz Garcia

unread,
Apr 4, 2016, 5:20:29 PM4/4/16
to Comunidad de Visual Foxpro en Español
Usa este proceso:
MESSAGEBOX(strtran("1.895.25","."," ",1,1))
Espero que te pueda servir

Emil

unread,
Apr 4, 2016, 5:42:00 PM4/4/16
to Comunidad de Visual Foxpro en Español
Gracias Jean, en principio me sirve, aunque también me elimina el decimal si la cifra es menos de mil, (porque la tengo que tener con punto), pero si no hay otro remedio, le aplicaré una condición de si es mayor de 999 que me lo quite, y si nó que no lo quite.

Muchas gracias

ZeRoberto

unread,
Apr 4, 2016, 5:45:47 PM4/4/16
to publicesvfoxpro
lcCurrency = Set("Currency")
lcPoint = Set("Point")
Set Currency To "."
Set Point To To ","
? Val("1.999,00")
Set Currency To (lcCurrency)
Set Point To (lcPoint)

ZeRoberto

unread,
Apr 4, 2016, 5:52:43 PM4/4/16
to publicesvfoxpro
Perdon me equivoque, no esta bien la respuesta que di, en vez de currency debe ser Set Separator.- Pero veo que eso no altera al funcion val()

ZeRoberto

unread,
Apr 4, 2016, 5:55:45 PM4/4/16
to publicesvfoxpro
Lo unico que queda es 

lcTexto = "1.999,89"
? StrTran(StrTran(StrTran(lcTexto, ",", "*"), ".", ","), "*", ".")

Saludos

Emil

unread,
Apr 4, 2016, 6:07:40 PM4/4/16
to Comunidad de Visual Foxpro en Español
El problema es que también le tengo que aplicar...

alltrim()
transform(, "####.##")
más esto...
StrTran(StrTran(StrTran(lcTexto, ",", "*"), ".", ","), "*", ".")

y no me lo acepta...



Ricardo Pina

unread,
Apr 4, 2016, 6:34:28 PM4/4/16
to Grupo VFP
Hola

lcText="1.234.56"
STUFF(STRTRAN(lcText,".",""), LEN(lcText)-3, 0, ".")

TRANSFORM(VAL(STRTRAN(lcText,".",""))/100,"#####9.99")


--
            

                   Ricardo Pina

Desarrollo y Servicios Informáticos

                  Profesionales
               www.dsip.com.ar

 

 

Víctor Hugo Espínola Domínguez

unread,
Apr 4, 2016, 6:46:37 PM4/4/16
to publice...@googlegroups.com
cFormated = "12,345,678,901.23"
? Chrtran(Chrtran(Stuff(cFormated,Max(Rat(",", cFormated),Rat(".", cFormated)),1,"*"), ",.", ""), "*", Set("Point"))


Saludos,
Víctor.
Lambaré - Paraguay.

Emil

unread,
Apr 4, 2016, 6:48:01 PM4/4/16
to Comunidad de Visual Foxpro en Español
Me da error con cualquiera de las dos... me dice que argumentos no válidos, lo unico que cambio es esto:

STUFF(STRTRAN(tablaConta.importe,".",""), LEN(tablaConta.importe)-3, 0, ".")

y en esta:

TRANSFORM(VAL(STRTRAN(tablaConta.importe,".",""))/100,"#####9.99")


Jean Pierre Adonis De La Cruz Garcia

unread,
Apr 4, 2016, 7:27:58 PM4/4/16
to Comunidad de Visual Foxpro en Español
Bueno, viendo los ejemplos de los demas, lo corrigo, para que soluciones lo mencionado que cuando era mayor que 999.99
la Formula es la misma, solo con una condicion simple,
valor="1.895.25"
MESSAGEBOX(IIF(LEN(valor)>6,strtran(valor,"."," ",1,1),valor))

valor="895.25"
MESSAGEBOX(IIF(LEN(valor)>6,strtran(valor,"."," ",1,1),valor))


El lunes, 4 de abril de 2016, 16:06:49 (UTC-5), Emil escribió:

Fidel Charny

unread,
Apr 4, 2016, 7:45:36 PM4/4/16
to Comunidad de Visual Foxpro en Español
Emil
Si TAblaConta.Importe es un campo numérico, entonces estamos trabajando de más y de ahi el error, ya que tanto STUFF, STRTRAN, TRIM son funciones de texto.
En cambio, según tu propuesta, "1.895.25" es una cadena.
Aclara un poco mejor tu escenario.

Ricardo Pina

unread,
Apr 4, 2016, 7:56:47 PM4/4/16
to Grupo VFP
Que tipo de dato es importe ?
Asumi character

Fidel Charny

unread,
Apr 4, 2016, 8:00:29 PM4/4/16
to Comunidad de Visual Foxpro en Español
Un detalle.
Creo que la mayoría pensamos que estabas lidiando con un archivo de texto, en el que algún trasnochado había puesto el mismo separador para miles que para decimales.

En cuanto a la cuestión, planteo lo siguiente.
TEXT TO lcText NOSHOW PRETEXT 15
12.281.15 ;
30.210 ;
1.230.4 ;
27 ;
3 ;
0 ;
0.00 ;
978 ;
976.0 ;
798.00 ;
7.235.248.12 ;
26.436.01
ENDTEXT

lnDec
= 2
lcMask
= REPLICATE("9",10)+".99"

lnNumbers
= ALINES(laNumbers,lcTExt,1+4,CHR(59))

lcString
= PADC("Entrada",16," ");
       
+PADC("Fidel",16," ");
       
+PADC("Victor",16," ");
       
+PADC("Ricardo",16," ");
       
+ CHR(13)+CHR(10)
       
FOR i
= 1 TO m.lnNumbers
    lnSep
= ALINES(laSep,laNUmbers[i],1+4,".")
    lcDec
= IIF(lnSep=1,laSep[1],IIF(BETWEEN(LEN(laSep[lnSep]),1,2),".","")+laSep[lnSep] )
     lcNumber
= ""
    FOR j
= 1 TO lnSep - 1
        lcNumber
= lcNumber ;
           
+ laSep[j]
    NEXT
    lcNumber
= TRANSFORM(VAL(m.lcNumber + lcDec ),m.lcMask)

**************
   
    lcVictor_Number
=  Chrtran(Chrtran(Stuff(laNUmbers[i],Max(Rat(",", laNUmbers[i]),Rat(".", laNUmbers[i])),1,"*"), ",.", ""), "*", Set("Point"))
 
*******************    
   
    lcRicardo_Number
= TRANSFORM(VAL(STRTRAN(laNumbers[i],".",""))/100,"#########9.99")

*    lcRicardo_Number = TRANSFORM(VAL(STRTRAN(STUFF(STRTRAN(laNUmbers[i],".",""), LEN(laNumbers[i])-3, 0, "."),".",""))/100,"#########9.99")
***********************

    lcString
= m.lcSTring ;
       
+ PADL(laNumbers[i],16," ") ;
       
+ PADL(lcNumber,16," ") ;
       
+ PADL(lcVictor_Number,16," ");
       
+ PADL(lcRicardo_number,16," ");
       
+ PADL(lnSep,6," ") + CHR(13)+CHR(10)
NEXT
STRTOFILE
(lcstring,"convert_point.txt")
MODIFY FILE convert_point
.txt NOEDIT
Lo que me muestra:
    Entrada          Fidel           Victor         Ricardo    
       
12.281.15        12281.15        12281.15        12281.15     3
         
30.210        30210.00          30.210          302.10     2
         
1.230.4         1230.40          1230.4          123.04     3
             
27           27.00              .7            0.27     1
               
3            3.00               .            0.03     1
               
0            0.00               .            0.00     1
           
0.00            0.00            0.00            0.00     2
             
978          978.00             .78            9.78     1
           
976.0          976.00           976.0           97.60     2
         
798.00          798.00          798.00          798.00     2
   
7.235.248.12      7235248.12      7235248.12      7235248.12     4
       
26.436.01        26436.01        26436.01        26436.01     3





Fidel Charny

unread,
Apr 4, 2016, 8:05:00 PM4/4/16
to Comunidad de Visual Foxpro en Español
Yo también Ricardo.
Ahora, revisando el post, veo que dice
     los valores de los importes que hasta ahora me muestra de este modo: "1.895.25"
con lo que parece que tendría que haber preguntado: adónde te muestra de ese modo ?

( no sea que se trate de una chinga en el inputmask, ja, ja!!! )

Fidel.

Ricardo Pina

unread,
Apr 4, 2016, 8:17:44 PM4/4/16
to Grupo VFP
Si, yo tambien vi el dato entre comillas pero lo debe haber resaltado de ese modo en el mail
debe ser que tiene alguna máscara de entrada en la tabla, pero me despistó tambien el separador de miles y decimales igual (no sabia que se podía!!) :-(


Víctor Hugo Espínola Domínguez

unread,
Apr 4, 2016, 8:36:06 PM4/4/16
to publice...@googlegroups.com
Mi fórmula corregida, en verdad es muy sencilla ;-)

cUnformated = ;
    Transform(Val(    ;
        Iif(Max(Rat(",", cFormated),Rat(".", cFormated)) = 0, cFormated, ;
        Chrtran(Chrtran(Stuff(cFormated,Max(Rat(",", cFormated),Rat(".", cFormated)),1,"*"), ",.", ""), "*", Set("Point")))    ;
                ), "999999999.99")



Saludos,
Víctor.
Lambaré - Paraguay.


Ricardo Pina

unread,
Apr 4, 2016, 8:42:04 PM4/4/16
to Grupo VFP
jaja

Google trasnlate Please!!

Fidel Charny

unread,
Apr 5, 2016, 7:21:46 AM4/5/16
to Comunidad de Visual Foxpro en Español
Victor Hugo:
Eso es   E s p e c t a c u l a r !!!.
Compro Urgente!

Fidel.

Emil

unread,
Apr 5, 2016, 11:23:55 AM4/5/16
to Comunidad de Visual Foxpro en Español
Si, disculpar por la tardanza en contestar y sobre todo por no haber indicado que era un campo numérico, la verdad es que al escribir los números daba por hecho que todo el mundo lo entendería como un número, pero tenéis toda la razón del mundo al pensar que podría ser texto.

Es un campo numérico y también estoy utilizando SET POINT TO "." para que me muestre un punto en los decimales, pero solo en el evento click donde la ejecuto.

Ahora no puedo, pero esta tarde en cuanto pueda me pongo a estudiar y revisar cada una de las aportaciones.
Reply all
Reply to author
Forward
0 new messages