Funcion VAL

22/09/2004 - 22:54 por Wilmer | Informe spam
Quisiera saber si la funcion VAL redondea una cifra con
decimales.
Gracias por la ayuda

Preguntas similare

Leer las respuestas

#11 Pedro José Hernández Muñoz
27/09/2004 - 19:07 | Informe spam
Hola Fernando

Menos mal ... Te respondo, solo era por comentarlo.

Un saludo



Pedro José Hernández Muñoz

blog: http://pedrohdz.blogspot.com/
atom: http://pedrohdz.blogspot.com/atom.xml
"Fernando D. Bozzo" escribió en el mensaje
news:
Hola Pedro, ahora sí pude ver mejor lo que pasa.
Pareciera que en algún momento VFP se olvida de que SET DECIMALS es sólo
para formatear la salida y es tomado por el value del control. Luego,
cualquier intento de cambiar nuevamente el SET DECIMALS a 2 o mas no tiene
ningún efecto una vez que se asignaron los valores.

Ahora que queda clara la cuestión, pregunto: ¿y es necesario el SET


DECIMALS
a 1 o sólo era para notificar del problema?

Saludos,

Fernando D. Bozzo

"La programación es más eficiente cuando menos se piensa en el código"




"Pedro José Hernández Muñoz" escribió


en
el mensaje news:
> Hola
>
> En este caso concreto, al utilizar _screen.activeform.text1, se utiliza


el
> valor mostrado ya redondeado, incluso al acceder desde otro form creado
> posteriormente (adjuntos los valores en el depurador):
>
> LOCAL nValoroForm ,;
>
> nValorActiveForm
>
> PUBLIC oForm as Form
>
> PUBLIC oform2 as form
>
>
>
> PUBLIC nVal
>
> SET DECIMALS TO 1
>
> SET FIXED Off
>
> nVal=VAL("123,95") && nVal = 124
>
> oForm = CREATEOBJECT("form")
>
> oform.AddObject("Text1","textbox")
>
> oform.AddObject("Text2","textbox")
>
> oform.AddObject("Text3","textbox")
>
> oform.Text1.ControlSource = "nVal" && Aqui Text1.Value = 124
>
> oform.Text1.InputMask = "999.99"
>
> oform.text1.visible = .t.
>
> oform.text2.visible = .t.
>
> oform.text2.top = 30
>
> oform.text2.value = oform.text1.value + 0.01 && 124,01 ( El redondeo lo
> hace en text1 )
>
> oform.text3.visible = .t.
>
> oform.text3.top = 60
>
> oform.text3.value = nVal
>
> oform.Show
>
>
>
> oform2 = CREATEOBJECT("form")
>
> oform2.AddObject("Text1","textbox")
>
> oform2.text1.value = oform.text1.value
>
> oform2.text1.visible = .t.
>
> oform2.show
>
>
>
> WAIT WINDOW oform.text1.Value+0.01
>
> MESSAGEBOX(oform.text1.Value+0.01)
>
>
>
> nValoroForm = oform.text1.Value && 124
>
> nValorActiveForm = _screen.ActiveForm.text1.Value && 124
>
>
>
> ACTIVATE WINDOW trace
>
> suspend
>
>
>
> Te respondo tambien:
>
>
> > >Sin embargo desde la ventana de comandos escribes
> >
> > >? _screen.ActiveForm.text1.Value+0.01 && Y muestra 124,01
> >
> > El comando '?' es para visualizar datos, por ende redondea la salida
>
> No estoy de acuerdo. El redondeo se produjo ya en Text1, si lo hiciera


en
> esa sentencia devolveria 124:
>
> ? _screen.Activeform.Text1.Value + 0.01
> 123,95 + 0.01 = 123.95 -> Al redondear con ? = 124
>
> Sin embargo:
> nValor = _screen.Activeform.Text1.Value + 0.01 && Almacena 124.01
>
>
> > >Aparte de que el primer textbox contiene 124,0, con lo que al editar


,
> > >partimos de un valor erróneo.
> >
> > Esto es erróneo, porque el primer textbox no contiene 124, sino 123,95


,
>
> No estoy de acuerdo. Al utilizar el valor de Text1 del primer form o


bien
> desde la ventana de comandos o bien desde otro form tambien devuelve


124,
> tal como muestro en el codigo del principio.
>
> Desde la ventana de depuración:
>
> nValorActiveForm = _screen.ActiveForm.text1.Value && Contiene 124
> nValoroForm = oform.text1.Value && Contiene 124
> nTextActiveForm = _screen.ActiveForm.text1.Text && Contiene 124
>
> y en el segundo form muestro el valor de Text1 del primer form, tambien
> contiene 124
>
>
> > Para ver ambos decimales en tu mismo ejemplo sólo cambiá el SET


DECIMALS
a
> > 2 y ejecutá el mismo form.
> Gracias, lo tendre en cuenta ... :-)
>
> > Otra forma de verificar el valor real de una variable o propiedad es
> > asignándolo a una variable temporal y mostrándolo con DISPLAY MEMORY
LIKE
> > (variable), lo que te muestra el valor como se visualiza redondeado y
> > entre paréntesis el valor real que está manejando VFP.
> Vale, entonces le digo al usuario que escriba eso en la ventana de
comandos
> o donde ? :-)
>
>
>
> Lo que yo pretendo decir es que,
> 1-Internamente en el form yo puedo utilizar el valor sin problemas
(123.95)
> 2-Al acceder a la propiedad Value o Text del cuadro de texto Text1
> externamente (mediante referencias _screen.activeform o oForm )obtengo


el
> valor redondeado (124).
> 3- Deduzco que al hacer el redondeo para mostrar, esta almacenando en
Value
> y Text el valor ya redondeado
> 4-En la ventana de depuración, si SET DECIMALS = 1 al utilizar VAL veo
> valores redondeados
>
>
> Se me escapa algo ?
>
> Pedro José Hernández Muñoz
>
> blog: http://pedrohdz.blogspot.com/
> atom: http://pedrohdz.blogspot.com/atom.xml
> "Fernando D. Bozzo" escribió en el mensaje
> news:%
> > Hola Pedro, lo que dice Luis María sigue siendo correcto en todo
sentido.
> > El ejemplo que ponés te muestra mal los valores porque están siendo
> > redondeados por el SET DECIMALS TO 1 que pusiste, esto afecta a
cualquier
> > comando de visualización: El textbox, ?, etc.
> > Esto es así porque estás indicando que se muestre con 1 sólo decimal,
> > entonces se redondea el primero (que es un 9) de acuerdo al valor del
> > segundo (que es un 5), por lo que el redondeo produce un nuevo entero:
El
> > redondeo matemático de 123,95 con un decimal es 124,0
> >
> > Ahora comento en partes de tu mensaje:
> >
> > >WAIT WINDOW oform.text1.Value+0.01 && 123,96
> >
> > correcto
> >
> > >Sin embargo desde la ventana de comandos escribes
> >
> > >? _screen.ActiveForm.text1.Value+0.01 && Y muestra 124,01
> >
> > El comando '?' es para visualizar datos, por ende redondea la salida
> >
> > >Aparte de que el primer textbox contiene 124,0, con lo que al editar


,
> > >partimos de un valor erróneo.
> >
> > Esto es erróneo, porque el primer textbox no contiene 124, sino 123,95


,
> > pero como el textbox es un control de entrada/salida de datos muestra


el
> > valor indicado con SET DECIMALS. La prueba de ello es que el segundo
> > textbox toma el valor del primero y le suma 0,01 y muestra 123,96 como
> > hacés notar al final de tu mensaje.
> > Para ver ambos decimales en tu mismo ejemplo sólo cambiá el SET


DECIMALS
a
> > 2 y ejecutá el mismo form.
> > Otra forma de verificar el valor real de una variable o propiedad es
> > asignándolo a una variable temporal y mostrándolo con DISPLAY MEMORY
LIKE
> > (variable), lo que te muestra el valor como se visualiza redondeado y
> > entre paréntesis el valor real que está manejando VFP.
> >
> > Saludos,
> >
> > Fernando D. Bozzo
> >
> >
> > Fernando D. Bozzo (Argentino)
> > Ciudad de Coslada - Madrid (España)
> > Habitante de "La Comunidad del Zorro"
> >
> >
> > PortalFox :: Nada corre como un zorro
> > http://www.portalfox.com
> >
> > PortalFox - NNTP Forum Gateway
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida