multiplicación errónea

21/11/2010 - 01:38 por Andres M. | Informe spam
Hola:

En un formulario tengo un campo calculado en el que me toma el dato de
un campo y lo multiplica por una cantidad fija.

El resultado, cuando hay números complejos (entiéndase como que no son
1000, 20000, 300, etc) el resultado de multiplicarlo por 50 y
dividirlo por 100 me da un resultado erroneo:
ejemplo:
290493,84 x 50 /100 = 145246,50

cuando en realidad el resultado debería ser: 145246,92;

otro:

290493,84 x 70 /100 = 203345,10

en realidad debería ser: 203345,69.

En resumen calcula mal.

la función es:

Private Sub tipo_de_la_subasta_LostFocus()

Dim TipoSubasta As Currency
Dim ResultadoCincuenta As Currency
Dim ResultadoSetenta As Currency
Dim Tantoporciento As Currency

TipoSubasta = ValorNumerico(tipo_de_la_subasta)
Tantoporciento = ValorNumerico(txtTantoporciento)
Me.consignacion_mínima.Value = TipoSubasta * Tantoporciento / 100

TipoSubasta = ValorNumerico(tipo_de_la_subasta)

Me.Resultado_cincuenta.Value = TipoSubasta * 50 / 100

TipoSubasta = ValorNumerico(tipo_de_la_subasta)

Me.resultado_setenta.Value = TipoSubasta * 70 / 100

End Sub


Donde "ValorNumerico" es un módulo;

Option Compare Database
Option Explicit


Public Function ValorNumerico(valor As Variant) As Long
ValorNumerico = Val(Nz(valor, ""))
End Function



En la propiedad Formato del formulario, el tipo de dato de
tiposubasta, resultadocincuenta y resultadosetenta son de tipo
estandar con 2 decimales y el campo tanto por ciento es estandar sin
decimales.

Muchas gracias de antemano

Preguntas similare

Leer las respuestas

#1 Emilio
21/11/2010 - 08:11 | Informe spam
¡Importante!: Colabora con el grupo. Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias
Hola!
prueba así

ValorNumerico = CDec(Nz(valor, 0))

val ignora los decimales, puedes verificarlo en la ventana inmediato.

Saludos a todos
Emilio [MS-MVP Access 2006/10]
miliuco56 ALGARROBA hotmail.com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Andres M." escribió en el mensaje de
noticias:

Hola:

En un formulario tengo un campo calculado en el que me toma el dato de
un campo y lo multiplica por una cantidad fija.

El resultado, cuando hay números complejos (entiéndase como que no son
1000, 20000, 300, etc) el resultado de multiplicarlo por 50 y
dividirlo por 100 me da un resultado erroneo:
ejemplo:
290493,84 x 50 /100 = 145246,50

cuando en realidad el resultado debería ser: 145246,92;

otro:

290493,84 x 70 /100 = 203345,10

en realidad debería ser: 203345,69.

En resumen calcula mal.

la función es:

Private Sub tipo_de_la_subasta_LostFocus()

Dim TipoSubasta As Currency
Dim ResultadoCincuenta As Currency
Dim ResultadoSetenta As Currency
Dim Tantoporciento As Currency

TipoSubasta = ValorNumerico(tipo_de_la_subasta)
Tantoporciento = ValorNumerico(txtTantoporciento)
Me.consignacion_mínima.Value = TipoSubasta * Tantoporciento / 100

TipoSubasta = ValorNumerico(tipo_de_la_subasta)

Me.Resultado_cincuenta.Value = TipoSubasta * 50 / 100

TipoSubasta = ValorNumerico(tipo_de_la_subasta)

Me.resultado_setenta.Value = TipoSubasta * 70 / 100

End Sub


Donde "ValorNumerico" es un módulo;

Option Compare Database
Option Explicit


Public Function ValorNumerico(valor As Variant) As Long
ValorNumerico = Val(Nz(valor, ""))
End Function



En la propiedad Formato del formulario, el tipo de dato de
tiposubasta, resultadocincuenta y resultadosetenta son de tipo
estandar con 2 decimales y el campo tanto por ciento es estandar sin
decimales.

Muchas gracias de antemano
Respuesta Responder a este mensaje
#2 Patxi Sanz
21/11/2010 - 11:51 | Informe spam
Fijaos bien en la función ;-)

Public Function ValorNumerico(valor As Variant) As Long
ValorNumerico = Val(Nz(valor, ""))
End Function

Se devuelve un valor de tipo Long o Entero Largo. Es decir, que
devuelve números enteros, sin decimales.

Si se desea un número con decimales, hay que usar un tipo que los
admita. Por ejemplo, ya que usas variables de tipo Currency o Moneda:

Public Function ValorNumerico(valor As Variant) As Currency
ValorNumerico = CCur(Nz(valor, 0))
End Function
Respuesta Responder a este mensaje
#3 Andres M.
21/11/2010 - 14:40 | Informe spam
Mil gracias Patxi: funciona a las mil maravillas.

Efectivamente intuía que tenía que ser algo así, pero por más que
investigué no pude dar con la "tecla";

Infinitas gracias. ;-)


On 21 nov, 11:51, Patxi Sanz wrote:
Fijaos bien en la función ;-)

Public Function ValorNumerico(valor As Variant) As Long
    ValorNumerico = Val(Nz(valor, ""))
End Function

Se devuelve un valor de tipo Long o Entero Largo. Es decir, que
devuelve números enteros, sin decimales.

Si se desea un número con decimales, hay que usar un tipo que los
admita. Por ejemplo, ya que usas variables de tipo Currency o Moneda:

Public Function ValorNumerico(valor As Variant) As Currency
    ValorNumerico = CCur(Nz(valor, 0))
End Function
Respuesta Responder a este mensaje
#4 Andres M.
21/11/2010 - 14:42 | Informe spam
Gracias Emilio.

He probado y sigue sin dar la cantidad exacta.

Patxi tambien me ha aportado otra solución similar y parece que sí
funciona.

Mil gracias.!!!

On 21 nov, 08:11, "Emilio" wrote:
¡Importante!: Colabora con el grupo. Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias
Hola!
prueba así

ValorNumerico = CDec(Nz(valor, 0))

val ignora los decimales, puedes verificarlo en la ventana inmediato.

Saludos a todos
Emilio [MS-MVP Access 2006/10]
miliuco56 ALGARROBA hotmail.comhttp://www.mvp-access.com/forohttp://www.mvp-access.es/emilio
"Andres M."  escribió en el mensaje de
noticias:

Hola:

En un formulario tengo un campo calculado en el que me toma el dato de
un campo y lo multiplica por una cantidad fija.

El resultado, cuando hay números complejos (entiéndase como que no son
1000, 20000, 300, etc)  el resultado de multiplicarlo por 50 y
dividirlo por 100 me da un resultado erroneo:
ejemplo:
290493,84 x 50 /100 =  145246,50

cuando en realidad el resultado debería ser:  145246,92;

otro:

290493,84 x 70 /100 = 203345,10

en realidad debería ser: 203345,69.

En resumen calcula mal.

la función es:

Private Sub tipo_de_la_subasta_LostFocus()

Dim TipoSubasta As Currency
    Dim ResultadoCincuenta As Currency
    Dim ResultadoSetenta As Currency
    Dim Tantoporciento As Currency

    TipoSubasta = ValorNumerico(tipo_de_la_subasta)
    Tantoporciento = ValorNumerico(txtTantoporciento)
     Me.consignacion_mínima.Value = TipoSubasta * Tantoporciento / 100

      TipoSubasta = ValorNumerico(tipo_de_la_subasta)

     Me.Resultado_cincuenta.Value = TipoSubasta * 50 / 100

    TipoSubasta = ValorNumerico(tipo_de_la_subasta)

     Me.resultado_setenta.Value = TipoSubasta * 70 / 100

End Sub

Donde "ValorNumerico" es un módulo;

Option Compare Database
Option Explicit

Public Function ValorNumerico(valor As Variant) As Long
    ValorNumerico = Val(Nz(valor, ""))
End Function

En la propiedad Formato del formulario, el tipo de dato de
tiposubasta, resultadocincuenta y resultadosetenta son de tipo
estandar con 2 decimales y el campo tanto por ciento es estandar sin
decimales.

Muchas gracias de antemano
Respuesta Responder a este mensaje
#5 Emilio
21/11/2010 - 15:19 | Informe spam
efectivamente, no me había fijado en ese "pequeño" detalle ;-))

Saludos a todos desde Huelva

Emilio [MS-MVP Access 2006/10]
miliuco56 ALGARROBA hotmail PUNTO com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Andres M." escribió en el mensaje de noticias
news:
Gracias Emilio.

He probado y sigue sin dar la cantidad exacta.

Patxi tambien me ha aportado otra solución similar y parece que sí
funciona.

Mil gracias.!!!

On 21 nov, 08:11, "Emilio" wrote:
¡Importante!: Colabora con el grupo. Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias
Hola!
prueba así

ValorNumerico = CDec(Nz(valor, 0))

val ignora los decimales, puedes verificarlo en la ventana inmediato.

Saludos a todos
Emilio [MS-MVP Access 2006/10]
miliuco56 ALGARROBA
hotmail.comhttp://www.mvp-access.com/forohttp://www.mvp-access.es/emilio
"Andres M." escribió en el mensaje de
noticias:

Hola:

En un formulario tengo un campo calculado en el que me toma el dato de
un campo y lo multiplica por una cantidad fija.

El resultado, cuando hay números complejos (entiéndase como que no son
1000, 20000, 300, etc) el resultado de multiplicarlo por 50 y
dividirlo por 100 me da un resultado erroneo:
ejemplo:
290493,84 x 50 /100 = 145246,50

cuando en realidad el resultado debería ser: 145246,92;

otro:

290493,84 x 70 /100 = 203345,10

en realidad debería ser: 203345,69.

En resumen calcula mal.

la función es:

Private Sub tipo_de_la_subasta_LostFocus()

Dim TipoSubasta As Currency
Dim ResultadoCincuenta As Currency
Dim ResultadoSetenta As Currency
Dim Tantoporciento As Currency

TipoSubasta = ValorNumerico(tipo_de_la_subasta)
Tantoporciento = ValorNumerico(txtTantoporciento)
Me.consignacion_mínima.Value = TipoSubasta * Tantoporciento / 100

TipoSubasta = ValorNumerico(tipo_de_la_subasta)

Me.Resultado_cincuenta.Value = TipoSubasta * 50 / 100

TipoSubasta = ValorNumerico(tipo_de_la_subasta)

Me.resultado_setenta.Value = TipoSubasta * 70 / 100

End Sub

Donde "ValorNumerico" es un módulo;

Option Compare Database
Option Explicit

Public Function ValorNumerico(valor As Variant) As Long
ValorNumerico = Val(Nz(valor, ""))
End Function

En la propiedad Formato del formulario, el tipo de dato de
tiposubasta, resultadocincuenta y resultadosetenta son de tipo
estandar con 2 decimales y el campo tanto por ciento es estandar sin
decimales.

Muchas gracias de antemano




__________ Information from ESET Smart Security, version of virus signature
database 5635 (20101120) __________

The message was checked by ESET Smart Security.

http://www.eset.com




__________ Information from ESET Smart Security, version of virus signature database 5635 (20101120) __________

The message was checked by ESET Smart Security.

http://www.eset.com
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida