Получение разных результатов копирования формулы из Excel в ASP - PullRequest
0 голосов
/ 21 января 2010

Я пытаюсь скопировать формулу с листа 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, но продолжаю сталкиваться с тем же.

Это просто глупая ошибка? В какой-то момент я изучал квадратные корни отрицательных чисел, пока не попробовал = 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>"`

Ответы [ 3 ]

2 голосов
/ 21 января 2010

Я дуфус.

В электронной таблице 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>"

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

0 голосов
/ 21 января 2010

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

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

0 голосов
/ 21 января 2010

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

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

...