以文本方式查看主题

-  易表在线答疑  (http://www.egrid2000.com/dvbbs/index.asp)
--  用户社区  (http://www.egrid2000.com/dvbbs/list.asp?boardid=2)
----  [求助]如何精确计算某人在某年某月某日属于何年龄段档次问题  (http://www.egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=5092)

--  作者:tzszw
--  发布时间:2006/11/23 20:07:00
--  [求助]如何精确计算某人在某年某月某日属于何年龄段档次问题
   我做的一个系统,其中涉及对人员的分段问题,搞了好长时间,我认为很好了,但用户总觉得计算不精确,特此请教一下各位。
   情况是这样的:
   有一个分段方法,如下
   年龄段             男                         女
 第一年龄段       16周岁以下                 16周岁以下            
 第二年龄段       >=16周岁<50周岁            >=16周岁<45周岁
 第三年龄段       >=50周岁<60周岁            >=45周岁<55周岁
 第四年龄段       >=60周岁                   >=55周岁
 有一个固定的截止计算时间,为2005年12月31日(这个时间也可能会变动,但不管变动不变动,其对每个人来说,都是一致的,即每个人计算的截止时间均以此为准,姑且先定为“截止时间”,另一个时间为“出生年月”)。
 我目前的计算公式是:
 第一年龄段:if([性别]="男",if(DaysBtw([出生年月],[截止时间])/365<[年龄段!年龄段_一_男周岁],-1,0),if(DaysBtw([出生年月],[截止时间])/365<[年龄段!年龄段_一_女周岁],-1,0))
 第二年龄段:if([性别]="男",if(DaysBtw([出生年月],[截止时间])/365>=[年龄段!年龄段_二_男周岁1] and DaysBtw([出生年月],[截止时间])/365<[年龄段!年龄段_二_男周岁2],-1,0),if(DaysBtw([出生年月],[截止时间])/365>=[年龄段!年龄段_二_女周岁1] and DaysBtw([出生年月],[截止时间])/365<[年龄段!年龄段_二_女周岁2],-1,0))
  第三年龄段:if([性别]="男",if(DaysBtw([出生年月],[截止时间])/365>=[年龄段!年龄段_三_男周岁1] and DaysBtw([出生年月],[截止时间])/365<[年龄段!年龄段_三_男周岁2],-1,0),if(DaysBtw([出生年月],[截止时间])/365>=[年龄段!年龄段_三_女周岁1] and DaysBtw([出生年月],[截止时间])/365<[年龄段!年龄段_三_女周岁2],-1,0))
  第四年龄段:if([性别]="男",if(DaysBtw([出生年月],[截止时间])/365>=[年龄段!年龄段_四_男周岁],-1,0),if(DaysBtw([出生年月],[截止时间])/365>=[年龄段!年龄段_四_女周岁],-1,0))
  要求如定位某人在某年龄段,则其必须正好是满多少周岁月落在某个年龄段的档次里。即是分“男”或“女”用其“出生年月”至“截止时间”的天数/365天计算,但这样算的话还是有误差(特别是40岁以上人员,可能是有闰年的缘故)。
 如:周某,男,1946年1月7日出生,截止2005年12月31日,应属第三年龄段,因为其肯定不足60周岁(至60的应至2006年1月7日后),但却计算成第四年龄段的了。
  请大家看看,是不是公式有问题,什么好建议?
  谢谢!
  
--  作者:czy
--  发布时间:2006/11/23 20:13:00
--  
发文件测试吧。
--  作者:czy
--  发布时间:2006/11/23 20:16:00
--  
DaysBtw([出生年月],[截止时间])/365只能计算出大致的时间段,准确性值得怀疑。
--  作者:tzszw
--  发布时间:2006/11/23 20:33:00
--  
下面引用由czy2006/11/23 08:13pm 发表的内容:
发文件测试吧。

egd文件下载
文件如上,管理员,无密码。
计算的数据在“个人开户”表中,周某为周同二(周二同)
另外,这个表好象特慢,不知何故?
CZY老师,请帮忙看一下,谢谢!
--  作者:czy
--  发布时间:2006/11/23 20:35:00
--  
传个示例文件就可以了,怎么把整个程序都传上来了?

--  作者:czy
--  发布时间:2006/11/23 20:50:00
--  
[这个贴子最后由czy在 2006/11/23 09:03pm 第 1 次编辑]

YearFrac([出生年月],[截止时间],0)比DaysBtw([出生年月],[截止时间])/365要精确的多,你可以试试。

--  作者:czy
--  发布时间:2006/11/23 20:55:00
--  
个人开户中没找到周同二?
--  作者:czy
--  发布时间:2006/11/23 21:05:00
--  
你所说的慢主要表现在哪些方面?
--  作者:czy
--  发布时间:2006/11/23 21:09:00
--  
[这个贴子最后由czy在 2006/11/23 09:22pm 第 1 次编辑]

试试年龄段_第三的公式,看看是不是准确?

[[性别]="男" And YearFrac([出生年月],[截止时间],0)>=[年龄段!年龄段_三_男周岁1] Or YearFrac([出生年月],[截止时间],0)<[年龄段!年龄段_三_男周岁2] Or [性别]="女" And YearFrac([出生年月],[截止时间],0)>=[年龄段!年龄段_三_女周岁1] Or YearFrac([出生年月],[截止时间],0)<[年龄段!年龄段_三_女周岁2]

-=-=-=- 以下内容由 czy2006年11月23日 09:14pm 时添加 -=-=-=-
楼主怎么一声不吭呀,等你回话呢。


--  作者:tzszw
--  发布时间:2006/11/23 21:19:00
--  
我试试。先谢谢!
记得我原来的公式也是用的YearFrac,后来用户说不准,就又改了。
慢主要体现在点主菜单中“参保处理”进入二级菜单,慢得令人难以忍受。以前很快的

-=-=-=- 以下内容由 tzszw2006年11月23日 09:19pm 时添加 -=-=-=-
点上一条、下一条都慢得要命