我想问一下为什么会发生这种事。
当我在使用COUNT时将结果强制转换为DECIMAL5_2时,当计数在与强制转换分开的行中时,它按计划工作:
c1 = COUNT($.MenInMStatesPersons(IsBornBefore1980);
c2 = COUNT(MenBornBefore1980);
PercOlderMalesInMStates := (DECIMAL5_2)(c1/c2 * 100); //result 14.46当我试图将它压缩为一行时,输出就会发生变化:
PercOlderMalesInMStates := (DECIMAL5_2)(COUNT($.MenInMStatesPersons(IsBornBefore1980)/COUNT(MenBornBefore1980) * 100);
//result is 15但是,如果我将值声明为DECIMAL5_2类型,则只有一个班轮才能正常工作:
DECIMAL5_2 PercOlderMalesInMStates := (COUNT($.MenInMStatesPersons(IsBornBefore1980)/COUNT(MenBornBefore1980) * 100);
//result is 14.86非常感谢!
编辑:,我上面发布的代码和我的PC中实际的ECL文件中的代码有区别。显然,我在这里输入了一个工作表达式,而我在本地ECL文件中摸索了一下包。
这篇文章中的一条线:
PercOlderMalesInMStates := (DECIMAL5_2)(COUNT($.MenInMStatesPersons(IsBornBefore1980)/COUNT(MenBornBefore1980) * 100);
//result is indeed correct (14.86)本地ECL文件中的一行:
PercOlderMalesInMStates := (DECIMAL5_2) (COUNT($.MenInMStatesPersons(IsBornBefore1980)) / COUNT(MenBornBefore1980)) * 100;
//result is incorrect(15)注意括号中的差异!我现在猜测发生这种情况的原因是,在我的本地ECL文件中,DECIMAL5_2转换发生在分数部分可以乘以100之前,因此它成为一个整数。
再次感谢您,为您的错误道歉!
发布于 2022-10-19 19:31:35
在我的机器上,这段代码为所有这三种代码生成了完全相同(正确)的答案:
IMPORT $;
IsBornBefore1980 := $.Persons.BirthDate < '1980';
MenBornBefore1980 := $.Persons(Gender = 'M',BirthDate < '1980');
c1 := COUNT($.MenInMStatesPersons(IsBornBefore1980));
c2 := COUNT(MenBornBefore1980);
PercOlderMalesInMStates1 := (DECIMAL5_2)(c1/c2 * 100); //result 14.46
PercOlderMalesInMStates2 := (DECIMAL5_2)(COUNT($.MenInMStatesPersons(IsBornBefore1980))/COUNT(MenBornBefore1980) * 100);
DECIMAL5_2 PercOlderMalesInMStates3 := COUNT($.MenInMStatesPersons(IsBornBefore1980))/COUNT(MenBornBefore1980) * 100;
PercOlderMalesInMStates1;
PercOlderMalesInMStates2;
PercOlderMalesInMStates3;我不知道为什么您的代码会产生不同的结果,但是在我的代码版本运行之前,我确实需要纠正几个语法错误。试试我的版本看看你能得到什么。
HTH,
理查德
https://stackoverflow.com/questions/74129882
复制相似问题