0

我正在尝试将 Excel 工作表中的公式复制到 ASP 页面上,但是在复制公式后我得到了不同的结果(实际上是一个错误,因为 ASP 最终试图对负数求平方根)。

当然 Excel 处理运算符优先级与经典 ASP 相同吗?

我试图复制的公式是一个简单的“T 检验”(用于报告统计显着性 - 我没有创建公式)并且在 Excel 中正常工作。在 Excel 中,单元格看起来像

A2 = 1098
B2 = 183

A4 = 20.4
B4 = 17.49

并且单元格 E4 包含以下公式:

=(A4-B4)/SQRT(((($A$2*A4)+($B$2*B4))/($A$2+$B$2))*
(1-((($A$2*A4)+($B$2*B4))/($A$2+$B$2)))*((1/$A$2)+(1/$B$2)))

因此,我只是将该公式复制/粘贴到经典 ASP 中,删除所有 $ 并将 SQRT 更改为 SQR,声明 4 个变量 A2、B2、A4、B4。这将返回一个错误(无效的过程调用)。

如果我删除公式的第一部分 - (A4-B4)/SQRT - 在 ASP 中代码返回 -2.41868099141296,但在 Excel 中它返回 0.001019435。

我已经尝试并尝试先分别计算公式的各个部分,然后将其重新组合在一起准备进行 SQRT,但仍然面临同样的事情。

这只是一个愚蠢的错误吗?有一次我一直在研究负数的平方根,直到我在 Excel 中尝试了 =SQRT(-9)

我正在使用的 ASP 代码是(我在第一行和最后一行插入了换行符):

A2 = cdbl(1098.0)
A4 = cdbl(20.4)
B2 = cdbl(183.0)
B4 =cdbl(17.49)

' Remove all the $, and (A4-B4)/SQRT part
response.write "<p>Result: " & ((((A2*A4)+(B2*B4))/(A2+B2))*(1-(((A2*A4)+(B2*B4))
/(A2+B2)))*((1/A2)+(1/B2))) & "</p>"`
4

3 回答 3

2

我是杜甫。

在 Excel 电子表格中,A4 和 B4 列被格式化为百分比。这些单元格中的实际值分别为 0.204 和 0.1749。Excel 公式在复制并粘贴(几乎)字面意思到 ASP 中时确实有效——我只是没有发现我的输入比预期的大 100 倍。

以下代码有效

A2 = cdbl(1098.0)
A4 = cdbl(0.204)
B2 = cdbl(183.0)
B4 =cdbl(0.1749)

response.write "<p>Result: " & (A4-B4)/SQR((((A2*A4)+(B2*B4))/(A2+B2))*
(1-(((A2*A4)+(B2*B4))/(A2+B2)))*((1/A2)+(1/B2))) & "</p>"

所以现在我只需要把它转换成一个函数。

于 2010-01-21T20:33:17.523 回答
0

在您的 Excel 工作表中,您是否进行了任何阻止您获得负数根的输入验证?

另外,你能发布相关的 ASP 代码吗?这可能只是一个简单的转录错误......

于 2010-01-21T18:01:06.483 回答
0

我认为这是 Excel 总是使用浮点数和 ASP 使用整数的情况(fi 1/A2 - 这是一个整数 - 可能会产生不同的结果。

尝试在整数计算中使用 cDbl( ... )。

于 2010-01-21T18:01:41.283 回答