2012-07-05 17 views

Odpowiedz

7

Można użyć ROUND dla FORMAT w VBA

Na przykład, aby pokazać 2 miejsca dziesiętne

Dval = 1.56789 

Debug.Print Round(dVal,2) 

Debug.Print Format(dVal,"0.00") 

Note: Powyższa dadzą Ci 1.57. Więc jeśli szukasz 1.56 następnie można przechowywać Dval na sznurku, a następnie zrobić to

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

Jeśli chcesz rundzie wartość, można skorzystać z funkcji round (ale należy pamiętać, że VBA użytkownika Funkcja Round używa zaokrąglania Bankera, znanego również jako round-to-even, gdzie będzie zaokrąglać o 5 w górę lub w dół, aby zaokrąglić za pomocą tradycyjnego zaokrąglania, użyj formatu).

Jeśli chcesz skróconej wartość bez zaokrąglenia, to nie ma potrzeby korzystania z ciągów jak w przyjętym odpowiedź - wystarczy użyć matematyki:

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 

Daje „2,34”.

+0

Funkcja naprawy była bardzo pomocna w moim przypadku! – carlossierra

+1

Zapomniałem o zaokrągleniu Bankera. +1 pomimo protekcyjnego "po prostu używaj matematyki". Aby wyświetlić tylko liczbę jako żądany OP, jeśli nie zależy ci zbytnio na zaokrąglaniu, Format() jest narzędziem dla zadania i jest prostsze niż Fix() (lub Int(), co jest równoważne Fix() dla liczb dodatnich). Istnieją jednak przypadki, w których zaokrąglanie bankowe powoduje pytania użytkowników i wymaga bardziej złożonej transformacji. – GlennFromIowa

4

Można użyć funkcji Int(). Debug.print Int(1.99543)

Albo lepiej:

Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double 
    Trunc = Int(value * (10^num))/(10^num) 
End Function 

Więc można użyć Trunc(1.99543, 4) ==>result: 1.9954

0

tak zabawne historie. Miałem kłopoty z szybką konwersją VB. Chcę po prostu skrócić podwójne do liczby całkowitej.

value = Int(83.768) 
value == 83 

Wspaniale, coś w VB zadziałało.

Ups, zapomniałem, że nie działa z liczbami ujemnymi

value = Int(-83.768) 
value == -84 

... tak, że po prostu się stało. VB używa zaokrąglania Bankera.

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 

Jeśli chcesz konkretnych miejsc po przecinku, co zrobić Makah nie tylko z ABS wokół wartości tak Int może obciąć poprawnie.

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