nro de decimales

07/08/2007 - 21:34 por Ivan | Informe spam
hola a todos,

¿sabeis si existe una forma de obtener el (posible) nº de decimales de
un numero?

de momento uso esto, que parece funcionar, pero me da la impresion de
que debe de haber alguna forma mas directa (¿matematica?), sin tener
que recurrir a las funciones de texto. Aunque no he logrado
encontrarla.

Public Function Nro_Decimales(ByVal nro As Double) As Integer
On Error Resume Next
If InStr(nro, Application.DecimalSeparator) > 0 Then _
Nro_Decimales = Len(CStr(nro)) - _
InStr(nro, Application.DecimalSeparator)
End Function

sobre todo es curiosidad, pero gracias por anticipado

un saludo
Ivan

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
08/08/2007 - 03:12 | Informe spam
hola, Ivan !

sabeis si existe una forma de obtener el (posible) nº de decimales de un numero?
de momento uso esto, que parece funcionar, pero me da la impresion de que debe de haber alguna forma mas directa
(matematica?), sin tener que recurrir a las funciones de texto. Aunque no he logrado encontrarla.



[p.e.]

Function Nro_decimales(Numero As Double) As Byte
Dim Decimales As Double: Decimales = Numero - Int(Numero)
Nro_decimales = IIf(Decimales, Evaluate("len(" & Decimales & ")") - 2, 0)
End Function

saludos,
hector.

__ el codigo expuesto __
Public Function Nro_Decimales(ByVal nro As Double) As Integer
On Error Resume Next
If InStr(nro, Application.DecimalSeparator) > 0 Then _
Nro_Decimales = Len(CStr(nro)) - _
InStr(nro, Application.DecimalSeparator)
End Function

sobre todo es curiosidad, pero gracias por anticipado
Respuesta Responder a este mensaje
#2 Ivan
08/08/2007 - 04:20 | Informe spam
hola Hector, muchas gracias de nuevo

aunque para el nº de decimales parece que hay que seguir recurriendo a
las funciones de texto (la verdaad es que no tengo nada en contra), o
al menos a 'Len', sin embargo he adaptado la forma de saber si
existian como te muestro en el ej ( hay que ver lo que me complico la
vida[¿como era aquello de¿¿ 'pik???)

en comentario como lo hacia hasta ahora

Public Function HayDecimales(ByVal nro As Double) As Boolean
''' HayDecimales = Len(CStr(Int(nro))) < Len(CStr(nro))
HayDecimales = (nro - Int(nro)) > 0 ' con tu opcion
End Function

de todas formas sigo dandole vueltas, por aquello de la sor..presa

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#3 Héctor Miguel
08/08/2007 - 04:54 | Informe spam
hola, Ivan !

aunque para el nº de decimales parece que hay que seguir recurriendo a las funciones de texto
(la verdaad es que no tengo nada en contra), o al menos a 'Len'
sin embargo he adaptado la forma de saber si existian como te muestro en el ej
(hay que ver lo que me complico la vida [como era aquello de... 'pik???)



1) te refieres al principio del 'KISS' [Keep It Simple and Stupid] ?
[mantenlo tan simple y tonto como sea posible] :))

2) por otro lado, como *contar* una variable [de texto] sin *pasar* por la funcion 'Len' ?
solo que hay que usar la de hoja de calculo, puesto que la de vba lo que devuelve [segun la ayuda en linea] es:
"Devuelve un tipo Long que contiene el numero de caracteres en una cadena"
"o el numero de bytes necesarios para almacenar una variable"

en comentario como lo hacia hasta ahora
Public Function HayDecimales(ByVal nro As Double) As Boolean
''' HayDecimales = Len(CStr(Int(nro))) < Len(CStr(nro))
HayDecimales = (nro - Int(nro)) > 0 ' con tu opcion
End Function
de todas formas sigo dandole vueltas, por aquello de la sor..presa



considerando que para variables de tipo boolean el cero es falso y diferente de cero es verdadero...
Function HayDecimales(nro As Double) As Boolean
HayDecimales = nro - Int(nro)
End Function

saludos,
hector.
Respuesta Responder a este mensaje
#4 Ivan
08/08/2007 - 18:05 | Informe spam
hola Hector,

gracias mil una vez mas [hay que ver el fruto que se puede sacar de
tan poquito espacio]

te refieres al principio del 'KISS' [Keep It Simple and Stupid] ? [mantenlo tan simple y tonto como sea posible]







=> efectivamente. [No se de donde me he sacado lo de 'pik'], y es que
[como comentabas ya hace tiempo], cada vez mas, me voy dando cuenta de
que, para poder moverse con soltura por todo este mundo de la
programacion (y probablemente, en casi cualquier otro), tan importante
(o quizas mas) como los conocimientos en si mismos, es el aplicarlos
ajustandose lo mas posible a dicho principio. Respecto a los
conocimientos, aunque, como en mi caso, se tengan mas bien poquitos,
supongo que poco a poco se pueden ir aduiriendo, pero en cuanto a la
capacidad para aplicar el KISS, me temo que hay algo de innato en ello
y no resulta tan facil adquirirlo (y en mi caso se acerca a la utopia
<por aquello de ideal>). Pero por ganas que no quede.

considerando que para variables de tipo boolean el cero es falso y diferente de cero es verdadero...




HayDecimales = nro - Int(nro)





=> claro ejemplo de lo anterior, mas aun porque no puedo alegar que no
supiera lo del cero=falso - <> 0=verdadero, aunque creo que a
partir de ahora no lo ovidare tan facilmente. Gracias de nuevo y a la
saca.

2) por otro lado, como *contar* una variable [de texto] sin *pasar* por la funcion 'Len' ?









=> aqui es donde me entran las dudas, que aunque las planteo, aparte
de que pueden ser una sarta de tonterias, no dejan de ser reflexiones
desde el desconocimiento->

.- ¿porque hemos de considerar el nº de decimales como el nº de
elementos/caracteres de una variable de texto?

.-¿quizas porque lo que realmente estamos 'contando' es la
representacion grafica de dichos numeros?

.-¿quiere esto decir que los numeros decimales, o mejor dicho, la
parte decimal de un nº, no tiene una entidad propia que sea de alguna
manera cuantificable si no es considerandolos como 'grafos'?

solo que hay que usar la de hoja de calculo, puesto que la de vba lo que devuelve









supongo que este debe ser el motivo de haberme visto obligado a
convertir a texto los nros. antes de contar sus caracteres [la verdad
es que me ha mareado un poco el tema, pues se pueden obtener
resultados muy diversos de una forma u otra]. Otra mas 'pa' la saca y
otra monton de gracias.

como ves, mas que una consulta parece un soliloquio, pero cualquier
cosa que te animes a comentar estoy seguro que ayudara a despejar mas
de una 'bruma'

en cualquier caso, un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#5 Lord Voldemort
08/08/2007 - 19:15 | Informe spam
bueno esto te lo saca sin usar macros..

mi office esta en español...
pon un numero con decimales en la celda A1
y pon esta formula en otro lado

=LARGO(TEXTO(A1-ENTERO(A1), "General"))-2

un Saludo

Lord Voldemort
Visual Basic 2005

Página de inicio del grupo: http://mx.groups.yahoo.com/group/vb2005Mysql
Dirección de correo del grupo:

"Ivan" escribió en el mensaje
news:
hola a todos,

¿sabeis si existe una forma de obtener el (posible) nº de decimales de
un numero?

de momento uso esto, que parece funcionar, pero me da la impresion de
que debe de haber alguna forma mas directa (¿matematica?), sin tener
que recurrir a las funciones de texto. Aunque no he logrado
encontrarla.

Public Function Nro_Decimales(ByVal nro As Double) As Integer
On Error Resume Next
If InStr(nro, Application.DecimalSeparator) > 0 Then _
Nro_Decimales = Len(CStr(nro)) - _
InStr(nro, Application.DecimalSeparator)
End Function

sobre todo es curiosidad, pero gracias por anticipado

un saludo
Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida