decimales y demas yerbas
-
Quisiera saber cual es la funcion para pasar la parte decimal de un numero decimal (balga la redundancia) y otro numero supongamos entero.
ej:
si tengo 4.32
pasar el 32 a otra variable.
Si hay alguna forma de limitar la cantidad de digitos, eso seria supremo
Desde ya gracias
Rulo -
No se si sera la mejor forma de hacerlo , pero funciona , agrega dos textbox y un boton y probalo
Código:Private Sub Command1_Click() a = Val(Text1.Text) 'el numero original b = a - Int(a) 'la parte decimal ( con cero y la coma ) ( al original le restas la parte entera ) c = Right$(Str$(b), Len(Str$(b)) - 2) ' se le saca el cero y la coma de la parte izquierda , en realidad tomas lo de la derecha menos los dos primeros de la izquierda d = Left$((c), 4) ' tomas lo primeros 4 numero de la izquierda , suponiendo que se dejan 4 decimales Text2.Text = d ' el resultado End Sub
-
si sabes el que la parte decimal tiene un ancho fijo, directamente, podes hacer un Right$(
, AnchoFijoDecimal). Por ej: Eso te devuelve el 9535.A = 154.9535
Right$(A,4)
Ahora, si no sabes el ancho fijo lo que te dijo bahiense puede servir... salvo que para obtener un decimal, no necesitas usar 4 variables. Yo lo haria de la siguiente manera.'Pasamos un decimal de doble precision, y devolvemos un long
Public Function DevolverDecimal(sNroCompleto As Double) As Long
Dim x As Long
Dim sLargo As String
'inicializamos la variable x
x = 1
'Obtenemos el largo del numero que se paso, para poder recorrerlo
sLargo = Len(CStr(sNroCompleto))
Do
'recorremos todo string de a un caracter para ver donde esta el
'separador decimal
If Mid$(sNroCompleto, x, 1) = "." Or Mid$(sNroCompleto, x, 1) = "," Then
'Si estamos en el valor decimal, salimos del bucle
Exit Do
End If
x = x + 1
Loop Until x >= sLargo
'Se devuelve solo la parte decimal
DevolverDecimal = CLng(Right$(sNroCompleto, sLargo - x))
End Function -
Podés utilizar la función InStr() para achicar el algoritmo:
Nota: te conviene devolver un String, ya que si devolvés un Long podría ocurrir un error de desbordamiento.Código:Function ObtenerDecimales(ByVal n As Double) As String Dim pos As Long pos = InStr(n, ".") + InStr(n, ",") If pos <> 0 Then ObtenerDecimales = Mid$(n, pos + 1) End Function
