1

私は、ASP や Vb スクリプトについてほとんど知りません。従来の ASP で記述されたプロシージャが予期せず小さい奇数に丸められるというエラーのトラブルシューティングを試みています。

私が理解しているように、 Round() は「偶数に丸める」必要があります。720 * 51 / 160 = 229.5 であるため、Round(720 * 51 / 160, 0) は 230 になります。ただし、ASP ページは常に 229 を返します。

実際の ASP コードを以下にコピーします。このインスタンスの変数は次のとおりです。

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 )
4

4 に答える 4

2

MSDNは、VBA の Round() 関数について次のように述べています。

Round 関数は、指定された小数点以下の桁数の数値を返す場合に便利ですが、丸め桁が 5 の場合に丸められる方法を常に予測できるとは限りません。VBA が数値を丸める方法は、その数値の内部バイナリ表現によって異なります。

VBScript について同じことを述べているわけではありませんが、同じことが起こっていると思います。

要するに、実際に予測どおりに動作する Round() 関数が必要な場合は、独自の関数を作成する必要があります。:/

(「偶数への丸め」式ではなく、「通常の」丸めを行う関数が必要な場合は、FormatNumber() を使用します。私の知る限り、その関数は実際には予測どおりに動作します。つまり、x.5は常に切り上げられます。 .)

于 2013-11-12T22:44:21.663 に答える