2012-07-05 67 views

Respuesta

7

También se puede usar para ROUNDFORMAT 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 
6

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".

+0

¡La función de reparación fue muy útil en mi caso! – carlossierra

+1

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

4

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

0

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