Преобразование экспоненты - PullRequest
       58

Преобразование экспоненты

1 голос
/ 21 октября 2019

Я использую:

For t = 1 To ActiveProject.Tasks.Count
    With Tasks(t)
        ' DurSen is a Custom Field Name. It returns an application field Number (such as 188743770 for Number4)
        Projectfield = FieldNameToFieldConstant("DurSen")
        ' the SpearmanRankCorrelation function occasionally produces a result like -6.06060606060606E-03.
        .SetField (Projectfield), SpearmanRankCorrelation(ProjectDuration, TmpVec, NN)
    End With
Next t

Это число, выраженное как показатель степени. Из-за присутствия "E" в номере, он не выполняет функцию Setfield. .Setfield помещает вычисленное значение в поле, на которое ссылается ProjectField для конкретной задачи, (t), но завершается ошибкой, когда вычисленное значение содержит «E».

Есть идеи, как избежать этой проблемы?

Ответы [ 3 ]

0 голосов
/ 22 октября 2019

У меня был более простой ответ, который я выяснил вчера. Вместо того, чтобы пытаться работать с ним как с числом, я просто преобразовал его в строку, использовал метод InStr, чтобы увидеть, присутствует ли «E», и, если он есть, назначить в качестве результата значение 0,001, поскольку любое значение E будетбыть меньше, чем 0,01.

Если InStr (SpearmanRankCorrelation (ProjectDuration, TmpVec, NN), "E")> 0, то .SetField (Dursen), 0,001 PD = 0,001 outputtr = ("575 - ID ="& tasks (t) .ID & "SpearmanRankCorrelation =" & SpearmanRankCorrelation (ProjectDuration, TmpVec, NN) & "Заменено на 0,001") Вызов Txt_Append (myfile, outputtr), остальное .SetField (Dursen), SpearmanRankCorrelation (ProjectDuration, ND)Конец, если

Спасибо, Рейчел, за ответ. Я пытаюсь не использовать пользовательские поля проекта. Приведенное выше поле .Set присваивает Result полю, которое идентифицируется значением Dursen (которое является внутренней ссылкой на поле).

0 голосов
/ 22 октября 2019

Рэйчел, я попробовал твой подход, но всякий раз, когда я сталкивался с результатом, который был отмечен буквой «E» в Результате, преобразование заканчивалось неудачей. использование> Setfield будет округлять до ближайшего сотого, только если вся строка является числовым значением (при преобразовании). Метод> Setfield не работает, если в выражении присутствует буква "E".

0 голосов
/ 21 октября 2019

Метод SetField ожидает, что параметр Value будет строкой. Таким образом, решение состоит в том, чтобы отформатировать число в виде строки. (например, Format(-6.06060606060606E-03, "0.0#####") => -0.006061)

Однако Microsoft Project округлит значение до ближайшей сотой, поэтому вы потеряете точность.

Лучше хранить числа, для которых требуетсяболее двух десятичных разрядов в текстовом поле и преобразуйте их обратно в числа по мере необходимости в коде.

...