我正在尝试将一个公式从Excel工作表复制到一个ASP页面上,但是复制了公式,我得到了不同的结果(实际上是一个错误,因为ASP最终试图将一个负数放平根)
当然,Excel处理运算符优先级与经典ASP相同吗?
我试图复制的公式是一个简单的“T-Test”(报告统计显着性 - 我没有创建公式)并且在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>"`
答案 0 :(得分: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>"
所以现在我只需将其转换为函数。
答案 1 :(得分:0)
在Excel工作表中,您是否正在进行任何阻止您获取负数根的输入验证?
另外,您可以发布相关的ASP代码吗?这可能只是一个简单的转录错误...
答案 2 :(得分:0)
我认为Excel总是使用浮点数和ASP使用整数(f.i。1 / A2 - 这是一个整数 - 可能会产生不同的结果。
尝试在整数计算周围使用cDbl(...)。