Evitar redondeo de decimales en textbox

Iniciado por rapbyone, 11 Febrero 2015, 16:25 PM

0 Miembros y 2 Visitantes están viendo este tema.

rapbyone

Estimados, tengo el siguiente código:

Código (vb) [Seleccionar]

Text2.Text = Val(Text1.Text) / 2
Text4.Text = Val(Text3.Text) - Val(Text2.Text)


así se ve el formulario:



Donde primero divido el "valor 2"  por 2 y el resultado lo resto al "valor 1"

El problema es que el resultado en el text4.text, debería ser 84,5, pero automáticamente redondea el valor a 85.

¿Como evito que el valor se redondeé?
Muchas Gracias

Shell Root

EHN.vbs
Código (vb) [Seleccionar]
Option Explicit

Dim var1, var2, var3, var4
var1 = 105
var2 = 41
var3 = 41 / 2
var4 = var1 - var3
MsgBox "Resultado: " & var4


Resultado: 84.5
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

okik

#2
Código (vb) [Seleccionar]

Dim A As Variant, B As Variant
A = Text1.Text
B = FormatNumber(A / 2, 2) 'No redondea y muestra dos decimales
Text2.Text = B
Text3.Text = CInt(A / 2) 'Redondea
Text4.Text = CVar(A / 2) 'No redondea



Usa 'Variant' para evitar el redondeo e 'Integer' para redondear. Para evitar demasiados decimales: 1.6666666667, usa FormatNumber (numero, decimales).

Si no quieres usar variables. Como en el ejemplo anterior, pones:

CVar(valor) <----No redondea
CInt(valor) <---Redondea



rapbyone

Se pasaron muchas gracias

Enviado desde mi LG-D805 mediante Tapatalk

rapbyone

¿Estimados y para aproximar un decimal, por ejemplo si tengo "76,5" me muestre 77?

okik

#5
Cita de: rapbyone en 11 Febrero 2015, 19:40 PM
¿Estimados y para aproximar un decimal, por ejemplo si tengo "76,5" me muestre 77?


No he encontrado ninguna función para eso, no se si habrá. Puedes usar este sencillo código:

Código (vb) [Seleccionar]
Dim A As Variant, B As Variant
A = 76.5
B = A - Int(A)
If B = 0.5 Then
A = A - 0.5 + 1
End If

Label1.Caption = A


Lo que hace es lo siguiente:

A= 76.5  '//mete el valor en A
B = A - Int(A) '//B= 76.5 - 76 = 0.5
if B= 0.5 then  '//Si B es igual a 0.5 entonces....
A= A- 0.5+1  '// A= 76.5 - 0.5+1
End If

Label1.Caption = A '//Muestra el valor de A = 77





engel lex

solo para aportar algo... se puede simplificar el código de okik para ahorrarnos la comparación

Código (vb) [Seleccionar]
Dim A As Variant
A = 76.5
A = Int(A+0.5)
Label1.Caption = A
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

okik

#7
Cita de: engel lex en 11 Febrero 2015, 20:39 PM
solo para aportar algo... se puede simplificar el código de okik para ahorrarnos la comparación

Código (vb) [Seleccionar]
Dim A As Variant
A = 76.5
A = Int(A+0.5)
Label1.Caption = A


Te había rectificado, pero  tu ejemplo es mucho mejor. Está genial  ;-). No me di cuenta que pusistes int() y te dije que si A =78 entonces el label daría 78.5. Esto es lo que pasa cuando un va de listo y resulta que soy medio listo  :P.