Получение другой формулы копирования результатов из Excel в ASP

Я пытаюсь воспроизвести формулу из рабочего листа Excel на страницу ASP, но, скопировав формулу, я получаю другие результаты (фактически ошибка, потому что ASP в конечном итоге пытается извлечь квадратный корень из отрицательного числа).

Конечно, Excel обрабатывает приоритет операторов так же, как классический ASP?

Формула, которую я пытаюсь воспроизвести, представляет собой простой «Т-тест» (для отчета о статистической значимости — я не создавал формулу) и правильно работает в 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, но продолжаю сталкиваться с одним и тем же.

Это просто глупая ошибка? В какой-то момент я искал квадратные корни из отрицательных чисел, пока не попробовал =SQRT(-9) в Excel

Я использую код 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>"`

person Dan    schedule 21.01.2010    source источник


Ответы (3)


Я дуфус.

В таблице 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>"

Так что теперь мне просто нужно преобразовать это в функцию.

person Dan    schedule 21.01.2010

На своем листе Excel вы выполняете какую-либо проверку ввода, которая мешает вам получить корень из отрицательного числа?

Кроме того, не могли бы вы опубликовать соответствующий код ASP? Это может быть просто ошибка транскрипции...

person AnonJr    schedule 21.01.2010
comment
Опубликовал код ASP, но я буквально выполняю поиск/замену в $ из формулы, а затем удаляю первую часть, поэтому остается только значение с квадратным корнем. В результате я получаю -2,41868099141296. - person Dan; 21.01.2010

Я думаю, что это случай, когда Excel всегда использует числа с плавающей запятой, а ASP использует целые числа (например, 1/A2, которое является целым числом, может давать разные результаты.

Попробуйте использовать cDbl( ... ) для целочисленных вычислений.

person Edelcom    schedule 21.01.2010