圆形功能无法正常工作

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。没有可选的第二个参数numdecimalplacesRound 函数返回一个整数:

numdecimalplaces

可选。表示小数点右侧多少位包含在舍入中的数字。如果省略,则 Round 函数返回整数。

换行

response.write round(tmp)

response.write round(tmp, 1)

如果您希望将值四舍五入到小数点后一位。

【讨论】:

以上是关于圆形功能无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何将ProfilePictureView更改为圆形图像。 Drawable无法正常工作

我无法让 Flutter 通知图标正常工作

为啥隐藏和显示密码功能无法正常工作?

注销功能无法正常工作[重复]

订阅功能无法正常工作

无法使 PHP 更新功能正常工作