将MS VS 2013(VB.net)与SQL Server 2012一起使用。
我正在查询数据库并使用存储过程返回double列表。然后我将每个双倍除以8760.当第一个列表从数据库返回时,它具有小数位。列表看起来像这样
执行计算后,小数位已被删除。见下图。
正如您所看到的,小数被删除了。好像你拿第一个并将它除以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
答案 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)