2015-07-19 92 views
3

DecimalValue =(Math.Round(VARDECIMAL/8,1)誰能幫助我獲得math.round()來得到下面的輸出

「VARDECIMAL」的價值將不斷變化,但在輸出後小數我只需要#0.0或#0.5

例如

9/8 = 1.1 - >但我需要這個1.5
11/8 = 1.4 - >但我需要這個1.5
21/8 = 2.6 - >但我需要這個3.0
27/8 = 3.4 - >但我需要這個3.5
8分之33= 4.1 - >但我需要這個4.5
8分之39= 4.9 - >但我需要這個5.0
45/8 = 5.6 - >但我需要這個6.0

的想法是小數點後高於0應四捨五入到0.5以上0.5應四捨五入1

+0

使用'Decimal.Round'它會產生你需要的東西。 – Codexer

回答

4

這就是它看起來像在C#中,但它應該很容易地移植到VB.Net:

http://goo.gl/ztLJC2

Math.Ceiling((double)value * 2)/2 
1

你可以嘗試使用這種微小的方法。

Public Function Round(num As Double) As Double 
    Dim intVal = CInt(Math.Truncate(num)) 
    Dim remainder = num - intVal 

    If remainder = 0 Then 
     Return num 

    ElseIf remainder <= 0.5 Then 

     remainder = 0.5 


     Return (intVal + remainder) 
    Else 


     intVal += 1 


     Return CDbl(intVal) 
    End If 

End Function 
+0

你的函數結果用'6.5'計算'45/8' – nelek

+0

@nelek我得到6與C#版本......不知道它可以不同 – scartag

+0

你的'intVal = Cint(num)'return'6'而不是'5' ...函數已經舍入到一個較高的int,因爲結果是5.625 – nelek

-2

這應該工作:math.round((值* 2)+0.5)/ 2)

+0

你處於正確的方向,但不是那樣... –