2017-01-18 2 views
0

Wir haben die Syntax unten, um das Alter mit Jahr, gefolgt von 2 Dezimalstellen zu berechnen. Die Formel funktioniert, außer wenn der Geburtstag ein ganzes Jahr ist (10 Jahre, 0 Monate; 10.0). Das Problem ist, dass sich die Dezimalstelle für ganze Jahre ohne Monate nach rechts verschiebt. Ein Jahr alt würde als 10.0 erscheinen, ein 9-jähriger würde als 90.0 erscheinen. Jede Anleitung im Skript, um diesen Fehler zu beheben, wäre willkommen!Alter Berechnung Glitch mit Dezimalstelle

Year (GetAsNumber (DOE)) - Year (DOB) - If (GetAsNumber (DOE) < Date (Month (DOB) ; Day (DOB) ; Year (GetAsNumber (DOE))); 1 ; 0) & (Mod (Month (GetAsNumber (DOE)) - Month (DOB) + 12 - If (Day (GetAsNumber (DOE)) < Day (DOB) ; 1 ; 0) ; 12)/12) 

Antwort

0

Das Hauptproblem mit Ihrem Ansatz besteht darin, dass Sie den Text Operator & verwenden, wenn Sie den numerischen + Operator werden sollen.

Wenn also die Mod()-Funktion eine Null zurückgibt (d. H. Wenn das Intervall eine ganze Anzahl von Jahren ist), fügen Sie dem Ergebnis einen Zeichenfolgenwert von hinzu.

würde ich auch empfehlen, vereinfachen Sie die Berechnung:

Let ( 
elapsedMonths = 12 * (Year (DOE) - Year (DOB)) + Month (DOE) - Month (DOB) - (Day (DOE) < Day (DOB)) 
; 
Div (elapsedMonths ; 12) + Mod (elapsedMonths ; 12)/12 
) 

Das Ergebnis dieser Berechnung ist eine Zahl. Um die Zahl mit zwei Dezimalstellen anzuzeigen, formatieren Sie das Feld als Dezimalzahl und wählen Sie 'Feste Anzahl von Dezimalstellen' Option.


P. S. Beachten Sie, dass die Funktionen Year(), Month() und Day() als Parameter Datum als Parameter benötigen. Wenn Sie das tun:

Year (GetAsNumber (DOB)) 

Filemaker ausführen wird es als:

Year (GetAsDate (GetAsNumber (DOB))) 

Und da DOB ist (vermutlich) ein Datum zu beginnen, sind Sie nur unnötige Typkonvertierungen Compoundierung, wenn Sie sollten verwendet einfach:

Year (DOB)