2009-08-04 130 views
7

Tôi có ứng dụng Visual Basic cần phải làm tròn số xuống, ví dụ: 2.556 sẽ trở thành 2.55 và không phải là 2.26.Làm tròn số xuống trong Visual Basic

tôi có thể làm điều này bằng cách sử dụng chức năng để lột các nhân vật hơn 2 ngay từ dấu thập phân sử dụng này:

Dim TheString As String 
TheString = 2.556 
Dim thelength = Len(TheString) 
Dim thedecimal = InStr(TheString, ".", CompareMethod.Text) 
Dim Characters = thelength - (thelength - thedecimal - 2) 
_2DPRoundedDown = Left(TheString, Characters) 

Có một chức năng tốt hơn để làm điều này?

Trả lời

10

Bạn có thể thực hiện việc này với Math.Floor. Tuy nhiên, bạn sẽ cần phải nhân lên * 100 và chia, vì bạn không thể cung cấp một số lượng chữ số

Dim theNumber as Double 
theNumber = 2.556 
Dim theRounded = Math.Sign(theNumber) * Math.Floor(Math.Abs(theNumber) * 100)/100.0 
+0

này sẽ không hoạt động nếu số lượng là tiêu cực. – Justin

+0

Thỉnh thoảng bạn có thể lưu số của mình dưới dạng số nguyên hoặc điểm cố định (nếu bạn không cần toàn bộ điểm động), thực hiện các phép tính trên các số điểm cố định và sau đó điều chỉnh chúng khi hiển thị cho người dùng. –

+0

@Justin: Điểm tốt - Tôi đã chỉnh sửa để tính số âm, cũng như số dương –

3

Một cách khác để làm điều đó mà không dựa vào việc sử dụng các kiểu String:

Dim numberToRound As Decimal 
Dim truncatedResult As Decimal 
numberToRound = 2.556 
truncatedResult = (Fix(numberToRound*100))/100 
+0

Sử dụng Fix() sẽ nhanh hơn một chút so với sử dụng Tầng(). – Justin

+2

Bạn có điều gì hỗ trợ tuyên bố đó không? –

+1

@Justin: Sửa lỗi thực sự chậm hơn Math.Floor - nó thực hiện kiểm tra, sau đó gọi Math.Floor trong nội bộ. Chạy bộ phản xạ trên Microsoft.VisualBasic.dll để biết chi tiết. –

2

Câu trả lời Math.Floor() là tốt. Tôi không chắc chính xác môi trường VB nào Fix() được định nghĩa. Như Justin đã chỉ ra, Math.Floor() sẽ không hoạt động với các số âm. Bạn sẽ phải lấy giá trị tuyệt đối, sau đó nhân với SGN() của số. Tôi không biết tên chính xác của hàm mà bạn muốn sử dụng để lấy SiGN (không phải sin()) của số đó.

Trong pseudo-code, lấy giá trị âm vào tài khoản, kết quả sẽ trông giống như:

result = sgn(num) * floor(abs(num * RoundToDig))/RoundToDig 

- bò Furry moo và giải nén.

+0

Tôi đã quen với hàm Fix() từ VB6, nhưng nó cũng có sẵn trong VB.NET - http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.conversion.fix.aspx –

+0

@WyrdestGeek: Hàm này là Math.Sign. @Saul: Sửa các cuộc gọi Math.Floor trong nội bộ. –

+0

Hoạt động kinh doanh này về giải nén bovines là gì? –

1

Để làm tròn xuống

Math.Floor(number) 

Để cắt ký tự

number.Substring(0,1) 

Bạn có thể chuyển nó sang chuỗi.

0
Dim Input As Decimal 
Dim Output As Decimal 
Input = 2.556 
Output = Input - (Input Mod 0.01) 

này sẽ làm việc với cả hai con số tích cực và tiêu cực

Các vấn đề liên quan