2012-07-05 46 views
8

Tôi cần phải cắt bớt số lượng chữ số thập phân của giá trị kép của tôi để hiển thị trong hộp văn bản. Làm thế nào để đạt được điều này với vba?Cắt xén đôi với VBA trong excel

Trả lời

7

Bạn có thể sử dụng ROUND cho FORMAT trong VBA

Ví dụ để hiển thị 2 chữ số thập phân

Dval = 1.56789 

Debug.Print Round(dVal,2) 

Debug.Print Format(dVal,"0.00") 

Note: Trên đây sẽ cung cấp cho bạn 1.57. Vì vậy, nếu bạn đang tìm kiếm 1.56 sau đó bạn có thể lưu trữ các Dval trong một chuỗi và sau đó làm điều này

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

Nếu bạn muốn vòng giá trị, sau đó bạn có thể sử dụng chức năng Round (nhưng lưu ý rằng VBA của Chức năng vòng sử dụng làm tròn của ngân hàng, còn được gọi là tròn-to-even, nơi nó sẽ tròn 5 lên hoặc xuống, để làm tròn bằng cách làm tròn truyền thống, sử dụng định dạng).

Nếu bạn muốn truncate giá trị mà không làm tròn, sau đó không có nhu cầu sử dụng chuỗi như trong câu trả lời chấp nhận - chỉ cần sử dụng toán học:

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 

này mang lại "2,34".

+0

Chức năng sửa lỗi rất hữu ích trong trường hợp của tôi! – carlossierra

+1

Tôi đã quên đi việc làm tròn của Ngân hàng. +1 bất chấp sự kết thúc "chỉ cần sử dụng toán học" jab. Để chỉ hiển thị số như OP được yêu cầu, nếu bạn không quan tâm nhiều về làm tròn, Format() là công cụ cho công việc và đơn giản hơn Fix() (hoặc Int(), tương đương với Fix() cho số dương). Tuy nhiên, có những trường hợp làm tròn của ngân hàng sẽ gây ra câu hỏi của người dùng và yêu cầu một sự chuyển đổi phức tạp hơn. – GlennFromIowa

4

Bạn có thể sử dụng hàm Int(). Debug.print Int(1.99543)

Hoặc tốt hơn:

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

Vì vậy, bạn có thể sử dụng Trunc(1.99543, 4) ==>result: 1.9954

0

câu chuyện rất thú vị. Tôi đã rối tung xung quanh với một chức năng chuyển đổi VB nhanh chóng. Tôi chỉ muốn cắt một đôi thành một số nguyên.

value = Int(83.768) 
value == 83 

Tuyệt vời, điều gì đó trong VB thực sự hiệu quả.

Rất tiếc, tôi quên mất nó không hoạt động với số âm

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

... yeah đó vừa xảy ra. VB sử dụng làm tròn ngân hàng.

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 

Nếu bạn muốn số thập phân cụ thể làm những gì Makah chỉ làm với Abs xung quanh giá trị để Int có thể cắt ngắn chính xác.

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