之前接到一个需求:修改REPORT,使其中一个显示货币数的栏位小数位数从2位(2 decimal places)变为4位(4 decimal places)。
该栏位以前的处理是以SRW.USER_EXIT()函数处理的,看了就头晕:
SRW.REFERENCE(:C_AMOUNT);
SRW.REFERENCE(:C_CURRENCY_CODE);
SRW.REFERENCE(:P_MIN_PRECISION);
SRW.USER_EXIT('FND FORMAT_CURRENCY
CODE=":C_CURRENCY_CODE"
DISPLAY_WIDTH="17"
AMOUNT=":C_AMOUNT"
DISPLAY=":C_AMOUNT_F"
MINIMUM_PRECISION=":P_MIN_PRECISION"');
查了一下相关文档(包括ITPUB上的),知道了该函数的大概功能,很多资料上都说参数MINIMUM_PRECISION决定了输出值小数点后位数,那就好办了,直接将:P_MIN_PRECISION强制改成4不就齐活儿了。可是事与愿违,运行结果却并非如此。怎么回事呢?这时候注意到,:P_MIN_PRECISION的值也不是2那么简单,而是0。怎么回事,该函数的功能到底是怎么样的呢?偏偏又看不到原代码。Metalink和Google上,也找不到我想要的信息,所有文档和资料对此都是一带而过,知道复制过来用就行了。
静下心来,其实问题的关键就是MINIMUM_PRECISION,于是建了一个简单的REPORT,配置了一些有规律的数据,通过做实验,观察运行结果,确定MINIMUM_PRECISION到底在函数中起到了什么作用。输入的数值为"22.22"、"333.333"、"4444.4444"、"55555.55555"、"666666.333333"、"7777777.77"、"8"、"0",当MINIMUM_PRECISION为0、1、2时,运行结果都一样,如附件图1,当MINIMUM_PRECISION为4时(大于2的数效果类似,以4为例),运行效果如附件图2。由图可知以下几点:1、MINIMUM_PRECISION不会改变原有值;2、该函数运行完输出结果小数点后最少两位,不够的自动添0,同时有千位分隔符“,”;3、当MINIMUM_PRECISION值大于2时,比如为4,当数值小数点后不足4位时,不会在后添0,而是空出空格。
了解了函数的具体功能及相关参数的作用,我就可以做我的需求了,首先MINIMUM_PRECISION不会改变原值,那我大可不必改它,而我需要4位小数的那个拦位,我就用substr,instr,rlap拼出4位,这不是什么问题。至此问题的解决告一段落。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12804718/viewspace-261566/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12804718/viewspace-261566/