Necesito truncar la cantidad de decimales de mi doble valor para mostrar en un cuadro de texto. ¿Cómo se podría lograr esto con vba?Truncamiento doble con VBA en Excel
Respuesta
También se puede usar para ROUND
FORMAT
en VBA
Por ejemplo para mostrar 2 decimales
Dval = 1.56789
Debug.Print Round(dVal,2)
Debug.Print Format(dVal,"0.00")
Nota: Lo anterior le dará 1.57
. Así que si usted está buscando 1.56
entonces se puede almacenar el dval en una cadena y luego hacer esto
Dim strVal As String
dVal = 1.56789
strVal = dVal
If InStr(1, strVal, ".") Then
Debug.Print Split(strVal, ".")(0) & "." & Left(Split(strVal, ".")(1), 2)
Else
Debug.Print dVal
End If
Si desea ronda el valor, a continuación, puede utilizar la función Round (pero tenga en cuenta que VBA de La función redonda utiliza el redondeo del banco, también conocido como redondo a par, donde redondeará un 5 hacia arriba o hacia abajo; para redondear usando el redondeo tradicional, use Formato).
Si desea truncar el valor sin redondeo, entonces no hay necesidad de utilizar cadenas como en la respuesta aceptada - sólo tiene que utilizar las matemáticas:
Dim lDecimalPlaces As Long: lDecimalPlaces = 2
Dim dblValue As Double: dblValue = 2.345
Dim lScale = 10^lDecimalPlaces
Dim dblTruncated As Double: dblTruncated = Fix(dblValue * lScale)/lScale
Esto produce "2,34".
Puede usar la función Int(). Debug.print Int(1.99543)
O mejor:
Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
Trunc = Int(value * (10^num))/(10^num)
End Function
esta manera puede utilizar Trunc(1.99543, 4)
==>result: 1.9954
historia tan divertido. Estaba jugando con una función de conversión VB rápida. Solo quiero truncar un doble en un entero.
value = Int(83.768)
value == 83
Impresionante, algo en VB realmente funcionó.
Vaya, se me olvidó que no funciona con números negativos
value = Int(-83.768)
value == -84
... sí que acaba de pasar. VB usa el redondeo Banker.
Public Function Trunc(ByVal value As Double) As Integer
' Truncate by calling Int on the Absolute value then multiply by the sign of the value.
' Int cannot truncate doubles that are negative
Trunc = (Abs(value)/value) * Int(Abs(value))
End Function
Si desea cifras decimales específicos hacen lo makah sólo lo hizo con el ABS en torno al valor de modo Int puede truncar correctamente.
Public Function Trunc2(ByVal value As Double, Optional ByVal num As Integer = 1) As Double
' Truncate by calling Int on the Absolute value then multiply by the sign of the value.
' Int cannot truncate doubles that are negative
Dim sign As Integer
sign = Abs(value)/value
Trunc2 = sign * (Int(Abs(value) * (10^num))/(10^num))
End Function
- 1. OnClick en Excel VBA
- 2. Renombrar archivos con Excel VBA
- 3. matriz en Excel VBA
- 4. Compare doble en VBA problema precisión
- 5. Excel VBA - xlDown
- 6. Subcadena de Excel VBA
- 7. Eliminación de imágenes con Excel VBA
- 8. Excel VBA Colón
- 9. VBA cambia Excel 2002 -> Excel 2007
- 10. Actualizar Excel Función VBA Resultados
- 11. Seleccionar celdas no en blanco en Excel con VBA
- 12. CopyOrigin en Insertar en Excel VBA
- 13. Excel VBA - salida de bucle
- 14. Excel VBA Regex Match Position
- 15. VBA Error Handling no funciona en Excel
- 16. Errores de manejo adecuado en VBA (Excel)
- 17. Filtrado de matrices 2D en Excel VBA
- 18. Matriz de Rango en Excel VBA
- 19. Barra de progreso en VBA Excel
- 20. Excel (2007) VBA - .Fórmula con comillas en él
- 21. Agrupando y nombrando formas en Excel con vba
- 22. cómo dividir una cadena con múltiples delimeters en vba excel?
- 23. derretir/remodelar en excel usando VBA?
- 24. Carcasa inferior eficiente en Excel VBA
- 25. Anular el registro de un XLL en Excel (VBA)
- 26. Obtenga el contenido de una carpeta sharepoint con Excel VBA
- 27. Función de llamada a Excel VBA con nombre de variable
- 28. VBA Excel Getting File Path (finaliza con la carpeta)
- 29. Abrir archivo de Excel para leer con VBA sin pantalla
- 30. Excel VBA mensaje emergente "Espere por favor"
¡La función de reparación fue muy útil en mi caso! – carlossierra
Me había olvidado del redondeo del banquero. +1 a pesar del jab condescendiente de "solo usar matemáticas". Para simplemente mostrar el número como se solicitó el OP, si no le importa demasiado el redondeo, Format() es la herramienta para el trabajo, y es más simple que Fix() (o Int(), que es equivalente a Fix() para números positivos). Sin embargo, hay casos en los que el redondeo del banco generará preguntas de los usuarios y requerirá una transformación más compleja. – GlennFromIowa