c++trunc函数用 EXCEL 实现 VCF 值的自动查及插值计算
龚家强
【摘 要】Using EXCEL to achieve VCF value automatic search and interpolation calculation, less development statements, simple and intuitive interface, convenient for data input and modification, can use EXCEL powerful statements output function, flexible output in a variety of formats statements, improved the development and work efficiency, strong practicability and economy.%  利用 EXCEL 实现 VCF 的自动查及插值计算,开发语句少,界面简单直观,便于数据录入及修改,可以利用EXCEL 强大的报表输出功能,灵活地输出各种格式的报表,提高了开发和工作效率,具有较强的实用性与经济性。
【期刊名称】《大众科技》
【年(卷),期】2013(000)006
【总页数】5页(P11-14,51)
【关键词】油品计量;EXCEL;VCF 查;插值计算;软件开发
【作 者】龚家强
【作者单位】广西博士海意信息科技有限公司,广西 南宁 530028
【正文语种】中 文
【中图分类】TP18
1 前言
利用EXCEL实现石油及其产品的计量报告输出以及其中的VCF值的自动查及插值计算,在用于鉴定工作时,具有如下特点: VCF值的查计算方便、准确、快速;程序开发过程不复杂,开发周期短,无需进行复杂的报表输出介面设计,界面简单直观,便于修改报表格式;体积小巧,免安装绿软件,可以U盘为载体,便于携带及数据保护和备份;系统崩溃时不会丢失数据,避免了复杂的数据灾难恢复过程;使用人员无须专门培训,易于上手。而且电脑目前普遍都装有 EXCEL,当所携带的电脑或便携打印机出现软件或硬件故障时,可以迅速转换工作电脑,不用重新安装打印机驱动程序,即可利用现场的其它电脑来完成计算及计量报告输出工作,不致于延误工作时间,特别是当船需要抢潮水快速卸货,或是需要速遣等,
对工作时间有一定要求的时候。
2 算法基本思想
表1 T60A原油VCF值表节选表878.0  880.0  882.0  884.0 37.00  0.9864  0.9865  0.9866  0.9866 37.25  0.9862  0.9863  0.9864  0.9864 37.50  0.9860  0.9861  0.9862  0.9862 37.75  0.9858  0.9859  0.9860  0.9860 38.00  0.9856  0.9857  0.9858  0.9858
注意到表1为一有限二维表格,第一行是20℃下的标准密度值,第一列是温度值,其余为相应的标准密度值和温度值所交叉对应的VCF值。温度值从负20度开始线性递增,每次递增值为0.25,到150度结束。考察温度值的递增情况,注意到每一度的温度值都分为四个值域区间:xyz.00-xyz.25;xyz.25-xyz.50;xyz.50-xyz.75;xyz.75-xy(z+1).0(以 x、y和z分别代表温度值的百位数、十位数和个位数),而每一个区间的端点值即为表中值。因此,只要将取得的待查温度值与这四个值域区间的边界值相比较,就可以确定待查温度值温度值落在哪一个值域区间之内,再将这一值域区间两端的值即表中温度值查出来,就完成了温度值的查工作。
同时,密度值从610.0开始等值递增,递增值为2,到1090.0结束。与温度的查算法同理,查范围也为四个值域区间,把待查密度值所在值域区间的两个端点值查出来。
当两个区间的端点值都出来之后,即可将其所交叉对应的表中四个VCF值也查出来,进行插值计算,得到所需的VCF值。这就是算法的基本思想。
3 程序语句
3.1 算法中所用到的函数主要为EXCEL自带的四个函数:ADDRESS()、INDIRECT()、MATCH()、TRUNC()
ADDRESS():按照给定的行号和列标,建立文本类型的单元格地址;
INDIRECT():返回指定单元格中包含的地址字符串所引用的单元格中的数值;
MATCH():返回在指定方式下与指定数值匹配的数组中元素的相应位置;
TRUNC():将数字的小数部分截去,返回整数。
3.2 为算法的八条主要实现语句
3.2.1 语句一
ADDRESS(IF((TRUNC(LOOK_TEMP.)+0.25)>LOOK_TEMP.,M ATCH(TRUNC(LOOK_TEMP.),temp._value_range),IF((TRUNC(LOOK_TEMP.)+0.5)>LOOK_TEMP.,MATCH(TRUNC(LOOK_TEMP.)+0.25,temp._value_range),IF((TRUNC(LOOK_TEMP.)+0.75)>LOOK_TEMP.,MATCH(TRUNC(LOOK_TEMP.)+0.5,temp._value_r ange),MATCH(TRUNC(LOOK_TEMP.)+0.75,temp._value_range)))),1))。
语句实现的功能是,查小于或等于待查温度值的表中温度值的单元格地址。当得到值所在的单元格的行号和列号之后,就可使用 ADDRESS()函数得到表中温度值的单元格地址,然后再用INDIRECT()函数来返回指定单元格中包含的地址字符串所引用的单元格中的数值,以进行插值计算。在这里需要说明的是,因为在EXCEL2003中ADDRESS()函数无法直接嵌套在INDIRECT()函数之中,所以,对于ADDRESS函数所得到的单元格地址,还需要用INDIRECT()函数在另一个单元格中返回数值。
语句中的参数 Look_temp为现场取得的待查表温度值,在EXCEL中使用本语句时,此变量就用录入的待查温度值所在的单元格代替,如A10等。参数TEMP._VALUE_RANGE指出录
入的温度值所在的区域, 例如,若为$A$1∶$A$682,即表示数据录入在工作表中第一列的第一行到第682行之内,相应温度值为从-20度到150度。
本语句嵌套了三层IF条件语句,使用了MATCH函数的精确匹配查功能。外层IF语句的作用是,将LOOK_TEMP.取整后,再加上 0.25,即为第一个值域区间的最大值。如果LOOK_TEMP.大于此最大值,则说明LOOK_TEMP.不在这一值域区间之中,IF语句逻辑值为假,执行嵌套的第二层IF语句,即 IF(…)。否则执行第一条语句,即:MATCH(TRUNC(LOOK_TEMP.), TEMP._VALUE_RANGE),得出此值域区间的最小值,即VCF值表中所显示的温度值,xyz.00,在VCF值表中第几行。在这里,MATCH()函数就相当于一个循环语句,从录入温度所在列的第一行一直比较到最后一行,直到到匹配值为止。同理,嵌套的内二层 IF语句判断LOOK_TEMP处于余下的三个值域区间的哪一个之中。
需要说明的是,语句中的最后一个数字“1”,是偏移量。如果VCF二维数据值域不录入在EXCEL工作表的第一列,而是从第N列M行开始录入的话,那么,因为本语句中MATCH()函数出的只是对应于录入的VCF二维数据值域的第一列的相对偏移量,而ADDRESS函数是居于绝对偏移量,即相对于整个工作表第一列的偏移量来引用参数的。所以,在这里要把
MATCH()函数得出的相对偏移量转变为绝对偏移量。具体要根据所录入的 VCF值域录入在工作表的哪一列哪一行,来确定偏移量是多少。换句话来说,即在一个大的二维工作表中,所划分出来的任意位置的一个子二维表格的第一列,相对于整个大的二维表格的第一列,偏移了多少列。
3.2.2 语句二
ADDRESS(IF(LOOK_TEMP.>(TRUNC(LOOK_TEMP.)+0.75),M ATCH(TRUNC(LOOK_TEMP.)+1,temp._value_range),IF(LOOK_TEMP.>(TRUNC(LOOK_TEMP.)+0.5),MATCH(TRUNC(LOOK_TEMP.)+0.75,temp._value_range),IF(LOOK_TEMP.>(TRUNC(LOOK_TEMP.)+0.25),MATCH(TRUNC(LOOK_TEMP.)+0.5,temp._value_range),IF(LOOK_TEMP.>(TRUNC(LOOK_TEMP.)),MATCH(TRUN C(LOOK_TEMP.)+0.25,temp._value_range),MATCH(LOOK_TEM P.,temp._value_range))))),1))。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。