SRW.USER_EXIT()函数问题解决过程

      之前接到一个需求:修改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位,这不是什么问题。至此问题的解决告一段落。

fj.png2.JPG

fj.png1.JPG

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12804718/viewspace-261566/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12804718/viewspace-261566/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值