7 respuestas
Tres soluciones más (pero estas funcionan):
Colocar 3 botones en el marco:
Private Sub Command_Click()
Dim nb As Double
Dim a1 As String
Dim dec_nb As String
Dim ent_nb As String
nb = 42653.6207986111
a1 = CStr(nb)
dec_nb = CDbl(Right(a1, Len(a1) - InStr(1, a1, ",")))
MsgBox dec_nb ' = "6207986111"
ent_nb = CDbl(Left(a1, Len(a1) - (Len(a1) - InStr(1, a1, ",") + 1)))
MsgBox ent_nb ' = 42653
End Sub
O (Universal para responder a rindher)
Private Sub Command1_Click()
Dim nb As Double
Dim a As String
Dim dec_nb As String
Dim ent_nb As String
nb = 42653.6207986111
a = CStr(nb)
dec_nb = Right(a, Len(a) - Len(CStr(Int(a))) - 1)
MsgBox dec_nb ' = "6207986111"
ent_nb = Left(a, Len(a) - Len(dec_nb) - 1)
MsgBox ent_nb ' = 42653
End Sub
O para hacerlo científico y Universal (resultados diferentes!):
Private Sub Command2_Click()
Dim nb As Double
Dim a As String
Dim dec_nb As Double
Dim ent_nb_s As String
Dim ent_nb As Double
nb = 42653.6207986111
ent_nb = Int(nb)
MsgBox ent_nb ' = 42653
ent_nb_s = nb - Int(nb)
dec_nb = ent_nb_s * 10 ^ (Len(ent_nb_s) - 2)
MsgBox dec_nb ' = 620798611096689
End Sub
Colocar 3 botones en el marco:
Private Sub Command_Click()
Dim nb As Double
Dim a1 As String
Dim dec_nb As String
Dim ent_nb As String
nb = 42653.6207986111
a1 = CStr(nb)
dec_nb = CDbl(Right(a1, Len(a1) - InStr(1, a1, ",")))
MsgBox dec_nb ' = "6207986111"
ent_nb = CDbl(Left(a1, Len(a1) - (Len(a1) - InStr(1, a1, ",") + 1)))
MsgBox ent_nb ' = 42653
End Sub
O (Universal para responder a rindher)
Private Sub Command1_Click()
Dim nb As Double
Dim a As String
Dim dec_nb As String
Dim ent_nb As String
nb = 42653.6207986111
a = CStr(nb)
dec_nb = Right(a, Len(a) - Len(CStr(Int(a))) - 1)
MsgBox dec_nb ' = "6207986111"
ent_nb = Left(a, Len(a) - Len(dec_nb) - 1)
MsgBox ent_nb ' = 42653
End Sub
O para hacerlo científico y Universal (resultados diferentes!):
Private Sub Command2_Click()
Dim nb As Double
Dim a As String
Dim dec_nb As Double
Dim ent_nb_s As String
Dim ent_nb As Double
nb = 42653.6207986111
ent_nb = Int(nb)
MsgBox ent_nb ' = 42653
ent_nb_s = nb - Int(nb)
dec_nb = ent_nb_s * 10 ^ (Len(ent_nb_s) - 2)
MsgBox dec_nb ' = 620798611096689
End Sub
R = A / B
Pos = InStr(1, R, ",") ' búsqueda de la existencia de la coma en R
If Pos <> 0 Then ' si existe la coma
E= CInt(Left(R, Pos - 1)) ' entonces recupera los números antes de la coma (parte entera)
Tai1 = Len(R) - (Pos + 1) ' cálculo de la longitud después de la coma
D = CInt(Right(R, Tai1)) ' recupera los números después de la coma (parte decimal)
End If
Pos = InStr(1, R, ",") ' búsqueda de la existencia de la coma en R
If Pos <> 0 Then ' si existe la coma
E= CInt(Left(R, Pos - 1)) ' entonces recupera los números antes de la coma (parte entera)
Tai1 = Len(R) - (Pos + 1) ' cálculo de la longitud después de la coma
D = CInt(Right(R, Tai1)) ' recupera los números después de la coma (parte decimal)
End If
Además, realmente es una metodología estúpida porque el buen funcionamiento de la función depende de los parámetros regionales del PC... En un PC americano, por ejemplo, el separador es el "." ...
Después, tal vez sea el método menos inteligente para llegar a este tipo de resultado: pasar por una conversión a cadena y luego a num... Menos mal que los procesadores actuales son rápidos, pero basta con querer realizar este tratamiento 1000000 de veces para darse cuenta de lo lento y pesado que es para el PC...
Intenta proporcionar un código que sea un poco serio...
Después, tal vez sea el método menos inteligente para llegar a este tipo de resultado: pasar por una conversión a cadena y luego a num... Menos mal que los procesadores actuales son rápidos, pero basta con querer realizar este tratamiento 1000000 de veces para darse cuenta de lo lento y pesado que es para el PC...
Intenta proporcionar un código que sea un poco serio...
Fonction privée IntDec(ByVal strch As String, ByVal valeur() As Integer) Comme Integer()
Dim Pos Comme Integer = InStr(strch, ".") ' recherche de l'existence du point dans R
Si Pos <> 0 Alors ' si le point existe
valeur(0) = CInt(Int(strch)) ' alors récupère les chiffres avant le point (partie entière)
valeur(1) = CInt(CStr(strch).Substring(Pos, 2)) ' récupère les chiffres après le point (partie décimale)
Sinon
valeur(0) = CInt(Int(strch))
valeur(1) = 0
Fin Si
Retour valeur
Fin Fonction
Dim Pos Comme Integer = InStr(strch, ".") ' recherche de l'existence du point dans R
Si Pos <> 0 Alors ' si le point existe
valeur(0) = CInt(Int(strch)) ' alors récupère les chiffres avant le point (partie entière)
valeur(1) = CInt(CStr(strch).Substring(Pos, 2)) ' récupère les chiffres après le point (partie décimale)
Sinon
valeur(0) = CInt(Int(strch))
valeur(1) = 0
Fin Si
Retour valeur
Fin Fonction
Este método funciona en general, pero para números demasiado grandes no funcionará.
Entero: Contiene enteros de 32 bits (4 bytes) con signo, cuya valor está entre -2 147 483 648 y 2 147 483 647.
Si el número a probar está fuera de estos límites, hay que encontrar otra solución (que estoy buscando actualmente :S)