Asp classic ASP(vbscript)中的舍入错误
我对ASP或Vb脚本知之甚少。我正在尝试解决一个错误,在这个错误中,一个用经典ASP编写的过程意外地四舍五入到一个较小的奇数 按照我的理解,Round()应该是“从圆到平”。因为720*51/160=229.5, 圆形(720*51/160,0)应等于230。但是,ASP页面始终返回229 下面复制了实际的ASP代码。此实例中的变量如下所示:Asp classic ASP(vbscript)中的舍入错误,asp-classic,rounding-error,Asp Classic,Rounding Error,我对ASP或Vb脚本知之甚少。我正在尝试解决一个错误,在这个错误中,一个用经典ASP编写的过程意外地四舍五入到一个较小的奇数 按照我的理解,Round()应该是“从圆到平”。因为720*51/160=229.5, 圆形(720*51/160,0)应等于230。但是,ASP页面始终返回229 下面复制了实际的ASP代码。此实例中的变量如下所示: FreeElig = 51 RedcElig = 0 PaidElig = 109 TotMlsSrvAms = 720 MlsSrvAmsFr is r
FreeElig = 51
RedcElig = 0
PaidElig = 109
TotMlsSrvAms = 720
MlsSrvAmsFr is returning the questionable value.
我感谢你能提供的任何帮助
多谢各位
Sub ClaimCalcs()
Dim tmpTtlEnroll, tmpFreeEnroll, tmpRedcEnroll, tmpPaidEnroll, tmpPct
Dim GreaterValue
tmpFreeEnroll = CLng(SetZero(FreeElig))
tmpRedcEnroll = CLng(SetZero(RedcElig))
tmpPaidEnroll = CLng(SetZero(PaidElig))
tmpTtlEnroll = tmpFreeEnroll + tmpRedcEnroll + tmpPaidEnroll
If tmpTtlEnroll > 0 Then
tmpPct = tmpFreeEnroll / tmpTtlEnroll
Else
tmpPct = 0
End If
MlsSrvAmsFr = Round(CLng(SetZero(TotMlsSrvAms)) * tmpPct, 0 )
你可以
MlsSrvAmsFr = Round((CLng(SetZero(TotMlsSrvAms)) * tmpPct) + 0.5, 0
将0.5添加到代码中。我认为VBScript中没有内置的Ceil函数
我相信四舍五入会一直下降。因此,添加0.5将得到您想要的输出
0.1+0.5=0.6轮(0.6)=0
0.7+0.5=1.2轮(1.2)=1
MlsSrvAmsFr = Round((CLng(SetZero(TotMlsSrvAms)) * tmpPct) + 0.5, 0
将0.5添加到代码中。我认为VBScript中没有内置的Ceil函数
我相信四舍五入会一直下降。因此,添加0.5将得到您想要的输出
0.1+0.5=0.6轮(0.6)=0
0.7+0.5=1.2轮(1.2)=1轮并不像您预期的那样有效。发件人: Round函数执行从整数到偶数的操作,这与 从圆到大。返回值是最接近该值的数字 表达式,并具有适当的小数位数。如果 表达式正好介于两个可能的四舍五入值之间 函数返回可能的四舍五入值,其最右边的数字为 偶数。(在从四舍五入到更大的函数中,是 两个可能的四舍五入值之间的中间值始终四舍五入到 更大的数字。)
似乎舍入算法并不像示例中所暗示的那样清晰,这看起来像是另一个结果与预期略有不同的示例。舍入的工作方式与您预期的不太一样。发件人: Round函数执行从整数到偶数的操作,这与 从圆到大。返回值是最接近该值的数字 表达式,并具有适当的小数位数。如果 表达式正好介于两个可能的四舍五入值之间 函数返回可能的四舍五入值,其最右边的数字为 偶数。(在从四舍五入到更大的函数中,是 两个可能的四舍五入值之间的中间值始终四舍五入到 更大的数字。) 舍入算法似乎并不像示例中所暗示的那样清晰,这看起来像是另一个结果与预期略有不同的示例。关于VBA中的Round()函数有这样的说法: 尽管舍入函数对于返回具有指定小数位数的数字很有用,但当舍入位数为5时,您无法始终预测它将如何舍入。VBA如何舍入一个数字取决于该数字的内部二进制表示形式 关于VBScript,它并没有说同样的事情,但我冒昧地猜测,同样的事情正在发生 底线是,如果您想要一个Round()函数,它的实际行为可以预测,那么您必须编写自己的函数/ (如果您想要一个执行“正常”舍入的函数,而不是一些花哨的“舍入到偶数”公式,请使用FormatNumber()。据我所知,该函数的行为实际上是可预测的,即x.5将始终舍入。)关于VBA中的round()函数有这样的说法: 尽管舍入函数对于返回具有指定小数位数的数字很有用,但当舍入位数为5时,您无法始终预测它将如何舍入。VBA如何舍入一个数字取决于该数字的内部二进制表示形式 关于VBScript,它并没有说同样的事情,但我冒昧地猜测,同样的事情正在发生 底线是,如果您想要一个Round()函数,它的实际行为可以预测,那么您必须编写自己的函数/ (如果你想要一个进行“正常”舍入的函数,而不是一些花哨的“舍入到偶数”公式,请使用FormatNumber()。据我所知,这个函数的行为实际上是可预测的,即x.5总是舍入的。)舍入是一件痛苦的事情,它是vbs 以下是我在互联网上发现的一些功能,这些功能多年来一直在帮助我
Function Floor(Number)
Floor = Int(Number)
End Function
Function Ceil(Number)
Ceil = Int(Number)
If Ceil <> Number Then Ceil = Ceil + 1
End Function
Function Rounding(Number)
Rounding = Floor(Number)
If Number - Rounding >= .5 Then Rounding = Rounding + 1
End Function
功能楼层(编号)
楼层=整数(数字)
端函数
功能单元(编号)
Ceil=Int(数字)
如果Ceil编号,则Ceil=Ceil+1
端函数
函数舍入(数字)
四舍五入=楼层(数量)
如果数字-舍入>=.5,则舍入=舍入+1
端函数
轮是一种痛苦,它让vbs感到痛苦
以下是我在互联网上发现的一些功能,这些功能多年来一直在帮助我
Function Floor(Number)
Floor = Int(Number)
End Function
Function Ceil(Number)
Ceil = Int(Number)
If Ceil <> Number Then Ceil = Ceil + 1
End Function
Function Rounding(Number)
Rounding = Floor(Number)
If Number - Rounding >= .5 Then Rounding = Rounding + 1
End Function
功能楼层(编号)
楼层=整数(数字)
端函数
功能单元(编号)
Ceil=Int(数字)
如果Ceil编号,则Ceil=Ceil+1
端函数
函数舍入(数字)
四舍五入=楼层(数量)
如果数字-舍入>=.5,则舍入=舍入+1
端函数
对不起;我没有很好地解释这个问题。我不想影响某个特定的输出。我想了解正在发生的输出。请看。正如它所说,在.5,round函数应该是“从圆到偶数”。在这种情况下,它是四舍五入到奇数。为什么?如果你明确地说(在第二个参数中)四舍五入到小数点后0位,也许这就是为什么它会变成229位?@Fendorio,请仔细阅读这个问题。如果小数点正好为0.5,则VBScript Round()应舍入到最接近的偶数整数。出于某种原因,它在229.5中出错了:最近的偶数整数是230,但函数返回229;我没有很好地解释这个问题。我不想影响某个特定的输出。我想了解正在发生的输出。请看。正如上面所说的,在0.5,rou