FAQ > 金融建模 > 建模问题 > 精度

Q:天软客户端返回结果中精度显示问题    

  • 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