A:
前提说明:
结果集的精度显示,有两个地方可控。
第一种,系统参数设置框(勾选不执行默认参数或结果页面中的小锤子),小数个数的控制
在结果页面中:点开小锤子,后更改小数位数,-1为最长精度
或在执行函数时,不执行默认参数,弹出参数输入框:
第二种,代码setsysparam(PN_Precision(),2);的设置。
其作用域:只对程序的return结果有用,对其它无效,也就是说,程序在计算过程中都是最大精度在运算,只是当结果返回时,才做小数位数的处理。
注:该种用法,对结果集整表的实数有效,不能进行指定某些列进行处理,若有该类需求,须参考RoundTo等精度相关函数。
值域说明:
-1或其它负数,表示返回原数据全精度,最长可以有15位小数。
其它正整数N,则表保留N位小数。
当两种方式并存时,以哪个为准?咱们按程序代码执行先后顺序来分析:
1、系统参数是一个全局变量
2、当程序开始执行前,第一种方式已经设置好,即此时pn_precision()这个系统参数的初值即为-1(以图为例)。
3、当程序开始执行,执行完setsysparam(PN_Precision(),2);之后,全局变量pn_precision()的值被更改为了2。
4、如果程序中没有其他命令使得变量pn_precision()的值发生变更,则return的结果应该为保留了2位小数的结果。
若,得到的结果还是与想像中的不符,那需要检查一下是否将setsysparam(PN_Precision(),2);写到了BackupSystemParameters2()之后,此时,可参考:FAQ:Q:在设置了BackupSystemParameters2()之后,为何设置PN_Precision对结果无效?
setsysparam(PN_Precision(),2);
return 1.1454567;
//返回:1.15