2014-06-12 75 views
1

在SQL Server 2012中使用MS VS 2013(VB.net)。在計算後從列表中刪除小數點

我在查詢數據庫並使用存儲過程返回double列表。然後我將每個雙精度除以8760.當第一個列表從數據庫返回時,它有小數位。該列表看起來像這樣

enter image description here

的計算已完成後,小數已被刪除。見下圖。

enter image description here

正如你可以看到小數將被刪除。就好像你把第一個分成8760,你得到101.27任何人都知道爲什麼或如何避免這種情況?

我的代碼如下

Dim hoursInYear As Double = 8760 
Dim steamFees As List(Of Double) 
Dim steamFee As Double 
Dim steamFeePerHour As New List(Of Double) 
Dim steamFeeTotal As Double 
steamFees = RunDetailsCalculations.getFixedFeesSteam 


For Each steamFee In steamFees 
    steamFeePerHour.Add(steamFee \ hoursInYear) 
Next 

steamFeeTotal = steamFeePerHour.Sum 
+1

使用/ ,不是\ .... – podiluska

+0

'(steamFee \ hoursInYear)'是整數除法十進制s – Plutonix

+1

雖然奇怪的是某人在不知道它是否具有功能時使用了\\操作員,但這個問題是完全有效的,不應該作爲脫離主題來關閉,因爲它是「由不能再生成的問題引起的或一個簡單的印刷錯誤「。 –

回答

2

您正在使用反斜槓(\)運算符,其是用於整數除法。整數除法總是產生一個整數(不是小數部分)。如果要在分割後保留小數部分,則需要使用浮點除法,即正斜槓(/)運算符。

由於MSDN狀態:

整數除法使用\運算符(Visual Basic中)進行。整數除法返回商,即表示除數可以分成除數而不考慮任何餘數的次數的整數。除數和除數都必須是該運算符的整型(SByte,Byte,Short,UShort,Integer,UInteger,Long和ULong)。所有其他類型必須首先轉換爲整型。

換句話說,當你這樣做:

Dim result As Double = 887146.6 \ 8760 

你真正做的是這樣的:

Dim input1 As Integer = CInt(887146.6) ' 887146 
Dim input2 As Integer = 8760 
Dim result1 As Integer = input1 \ input2 ' 887146 \ 8760 = 101 (the remainder is dropped) 
Dim result2 As Double = CDbl(result1)  ' 101.0D 

或者更簡單地說:

Dim result As Double = CDbl(CInt(887146.6) \ 8760)