圆形功能无法正常工作
Posted
技术标签:
【中文标题】圆形功能无法正常工作【英文标题】:Round function not working properly 【发布时间】:2014-03-04 11:57:59 【问题描述】:我尝试使用 VBscript 对值进行四舍五入
这是我的代码
sql = "select lastcode from " & session("gasbook") & ".acccode where account='" _
& Trim(rsgrn.fields("stockcode")) & "'"
response.write sql
rs.Open sql, cn
if err.number<>0 then
cn.rollbacktrans
call HandleError(err.number,err.description,err.source)
Response.End
else
if (rs.EOF and rs.BOF) then
cn.RollbackTrans
Response.Write "GAS Code doesn't exist in " & session("gasbook")
Response.End
else
If clng(rs.Fields("lastcode")) <> 0 Then
cn.RollbackTrans
Response.Write "Stock Account must be control account in " _
& session ("gasbook")
Response.End
End If
end if
end if
dim tmp
tmp = rsgrn.Fields("amount")
response.write tmp
response.write round(tmp)
tmp
的值为 2984.5,但是当我在 tmp
上应用 round
时,它会转换为 2984 而不是 2984.5。
【问题讨论】:
实际上,您可能会发现它的 actual 值类似于2984.499999999314159
,因此它会向下舍入。
到值是精确的2984.5
你的变量是浮点数还是十进制数?使用 VarType(yourvar) 找出答案。
你的意思是舍入到 2984 而不是 2985?
请不要大喊大叫。我们不是聋子。
【参考方案1】:
该数字四舍五入为 2948,因为 .Net 框架遵循 IEEE 754 标准的Bankers Rounding algorithm。这不是数字是否四舍五入的问题,而是根据标准四舍五入到最接近的偶数。
证据:Here。和Here。
因此,round 函数完全符合 IEEE 标准。
【讨论】:
【参考方案2】:如有疑问,请阅读documentation。没有可选的第二个参数numdecimalplaces
,Round
函数返回一个整数:
numdecimalplaces
可选。表示小数点右侧多少位包含在舍入中的数字。如果省略,则 Round 函数返回整数。
换行
response.write round(tmp)
到
response.write round(tmp, 1)
如果您希望将值四舍五入到小数点后一位。
【讨论】:
以上是关于圆形功能无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章