1
votes

Conversion d'exponentiation

J'utilise:

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

C'est un nombre exprimé en exposant. En raison de la présence du "E" dans le numéro, la fonction Setfield échoue. Le .Setfield place la valeur calculée dans le champ référencé par ProjectField pour une tâche spécifique, (t) mais échoue lorsque la valeur calculée contient un "E".

Des idées pour éviter ce problème?


0 commentaires

3 Réponses :


0
votes

La méthode SetField attend le Le paramètre de valeur doit être une chaîne. La solution consiste donc à formater le nombre sous forme de chaîne. (par exemple, Format (-6.06060606060606E-03, "0.0 #####") => -0,006061 )

Cependant, Microsoft Project arrondira la valeur au centième près, vous perdrez donc la précision.

Mieux vaut stocker les nombres qui nécessitent plus de deux décimales dans un champ de texte et les reconvertir en nombres selon les besoins dans le code.


0 commentaires

0
votes

J'ai eu une réponse plus simple que j'ai trouvée hier. Au lieu d'essayer de le traiter comme un nombre, j'ai simplement converti en une chaîne, utilisé la méthode InStr pour voir si un "E" était présent et si c'est le cas, attribuer une valeur de 0,001 comme résultat, car toute valeur E le sera être inférieur à 0,01.

Si InStr (SpearmanRankCorrelation (ProjectDuration, TmpVec, NN), "E")> 0 Then .SetField (Dursen), 0,001 PD = 0,001 outputstr = ("575 - ID =" & tâches (t) .ID & "SpearmanRankCorrelation =" & SpearmanRankCorrelation (ProjectDuration, TmpVec, NN) & "Remplacé par 0,001") Appelez Txt_Append (myfile, outputstr) Autre .SetField (Dursen), SpearmanRankCorrelation (ProjectDuration, TmpVec, NN) Fin si

Merci, Rachel, pour votre réponse. J'essaie de ne pas utiliser les champs personnalisés du projet. Le .Setfield ci-dessus affecte le résultat au champ identifié par la valeur de Dursen (qui est une référence de champ interne).


0 commentaires

0
votes

Rachel, j'ai essayé votre approche mais chaque fois que je rencontrais un résultat exprimé avec un "E" dans le résultat, la conversion échouait. l'utilisation de> Setfield arrondira au centième le plus proche uniquement si la chaîne entière est une valeur numérique (lorsqu'elle est convertie). La méthode> Setfield ne fonctionne pas lorsqu'il y a un "E" dans l'expression.


0 commentaires