Vb.net 计算后从双精度列表中删除不必要的小数点
使用MS VS 2013(VB.net)和SQL Server 2012 我正在查询数据库,并使用存储过程返回double的列表。然后,我将每一个双精度除以8760。当第一个列表从数据库返回时,它有小数位。列表如下所示 计算完成后,删除小数。见下图 如您所见,小数被删除。如果你取第一个,除以8760,得到101.27,有人知道为什么或者如何避免这个吗 我的代码如下Vb.net 计算后从双精度列表中删除不必要的小数点,vb.net,Vb.net,使用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 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
您使用的是反斜杠(
\
)运算符,用于整数除法。整数除法总是得到一个整数(没有小数部分)。如果要在除法后保留小数部分,则需要使用浮点除法,即正斜杠(/
)运算符
作为缔约国:
整数除法使用\运算符(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)
(steamFee\hoursneyear)
是一种整数除法,可以去除小数。虽然有人在不知道运算符的功能时使用\-运算符是很奇怪的,但这个问题是完全正确的,不应该作为离题而结束,因为它是“由无法再复制的问题或简单的印刷错误引起的”。