年龄计算故障与小数位

时间:2017-01-18 18:30:01

标签: mysql filemaker

我们有以下语法来计算年份,然后是2位小数。该公式有效,除非生日是一整年(10年,0个月; 10.0)。问题是小数点在没有任何月份的情况下整年都会向右移动。一岁的孩子将显示为10.0岁,一个9岁的孩子将显示为90.0。我们将非常感谢脚本中修复此故障的任何指导!

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)

1 个答案:

答案 0 :(得分:0)

您的方法的主要问题是,当您应该使用数字&运算符时,您正在使用文本运算符+

因此,当Mod()函数返回零时(即,当间隔是整数年时),您将向结果附加字符串值"0"

我还建议你将计算简化为:

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

此计算的结果是一个数字。要显示带有两位小数的数字,请将字段格式化为十进制,然后选择&#39;固定小数位数&#39; 选项。

P.S。请注意,Year()Month()Day()函数需要 date 作为参数。当你这样做时:

Year ( GetAsNumber ( DOB ))

FileMaker将执行它:

Year ( GetAsDate ( GetAsNumber ( DOB )))

由于DOB(大概)是一个开始的日期,因此当您应该使用简单时,您只会复制不必要的类型转换:

Year ( DOB )