计算后不需要从double列表中删除小数点

时间:2014-06-12 14:04:07

标签: vb.net

将MS VS 2013(VB.net)与SQL Server 2012一起使用。

我正在查询数据库并使用存储过程返回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 个答案:

答案 0 :(得分:2)

您正在使用反斜杠(\)运算符,该运算符用于整数除法。整数除法总是产生整数(无小数部分)。如果要在除法后保留小数部分,则需要使用浮点除法,即正斜杠(/)运算符。

正如MSDN所述:

  

使用\ Operator(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)