金 兵,龚建新,阿尔曼·巴哈提,谷 鑫
(1. 新疆乌鲁木齐水文水资源勘测局,乌鲁木齐830000; 2. 河海大学 水利水电学院,南京210000)
工程水文计算中常涉及到一些特殊的计算方法,如时段洪量的加权计算、数据的四舍六入等,Microsoft 公司研发的集成软件Office 包括8个常用组件,其组件之一Excel 电子表格软件中的Right、Mod、Round 、SUMPRODUCT 等函数可以很好地解决水文计算中所遇到的问题。从统计学的角度,“四舍六入”比“四舍五入”要科学,它使舍入后的结果有的变大,有的变小,更平均,而不是像“四舍五入”那样逢五就入,导致结果系统偏向大数。
定义:判断真假值执行函数,根据逻辑计算的真假值,等于不同的结果。语法: F( logical,Value1,Value2) 。参数:Logical 表示计算结果为TRUE 或FALSE 的任意值或表达式。
定义:根据所指定的字符数返回文本字符串中最后一个或多个字符,即取从text 右边开始的chars个字符。语法:RIGHT( text,chars) ;参数:Text 是包含要提取字符的文本字符串;chars 是指希望RIGHT 提取的字符数。
定义: 将数字向下舍入到最接近的整数,即≤number 的最大整数。语法:INT( number) ; 参数: Number 需要进行向下舍入取整的实数。
定义: mod 函数是一个求余函数。结果的正负号与除数相同。语法:MOD( Exp1,Exp2) ; 参数: Exp1 为被除数; Exp2为除数。
定义:等于某个数字按指定位数取整后的数字。语法:ROUND( num,digits) ;参数: Num 需要进行四舍五入的数字;digits 指定的位数,按此位数进行四舍五入。
定义:在给定的几组数组中,将数组间对应的元素相乘,并等于乘积之和。语法: SUMPRODUCT( aa1,aa2,aa3,...) 。aa1,aa2,aa3,... 为2 到30个数组,其相应元素需要进行相乘并求和。
自定义函数:Excel 函数通过使用参数来按特定顺序执行计算的方法,自定义函数完全可以实现和Excel 函数相同的功能,并符合Excel 函数的使用规则。四舍六入函数源程序如下:
四舍六入依据《数值修约规则》、《水文资料整编规范》,规范中对有效位数、指定数位、进舍规则进行了定义。
指定数位:1) 指定修约间隔为10-n( n 为正整数) ,或指明将数值修约到n 位小数;2) 指定修约间隔为1,或指明将数值修约到个数位;3) 指定修约间隔为10n,或指明将数值修约到10n数位( n 为正整数) ,或指明将数值修约到“十”、“百”、“千”……数位。
进舍规则:1) 拟舍弃数字的最左一位数字<5 时,则舍去,即保留的各位数字不变;2) 拟舍弃数字的最左一位数字>5,或者是5,而其后跟有并非全部为0 的数字时,则进一,即保留的末位数字加1;3) 拟舍弃数字的最左一位数字为5,而右面无数字或皆为0 时,若所保留的末位数字为奇数(1,3,5,7,9) 则进一,为偶数(2,4,6,8,0) 则舍弃。
依据上述原则在单元格B2 栏输入公式:
=IF( B2 =0,0,IF( RIGHT( B2* 10^( mm +2) ,2) ="50",IF( MOD( INT( B2* 10^mm) ,2) =0,INT( B2* 10^mm) /10^mm,INT( B2* 10^mm) +1) /10^mm,round( B2,mm) ) )
公式中:mm 为小数位数,取1 位小数,mm =1,则看小数点后3 位,即执行B2* 10^( mm +2) 语句;取2 位小数,mm =2,则看小数点后4 位;取整数mm=0,则要看小数点后2 位。
如函数RIGHT 根据所指定的字符数等于50,即RIGHT( B2* 10^( mm +2) ,2) ="50",用函数MOD( INT( B2* 10^mm) ,2) 判断欲保留的末位数字为奇数(1,3,5,7,9) 则进一,即执行INT( B2* 10^mm) +1) /10^mm 语句。为偶数(2,4,6,8,0) 则舍弃,即执行INT( B2* 10^mm) /10^mm 语句。
如函数RIGHT 根据所指定的字符数<50 或>50,则用round( B2,mm) 函数按四舍五入处理。四舍六入计算表见表1。
表1 数据四舍六入计算表
SUMPRODUCT 函数可以解决时段洪量的计算问题,表2为英雄桥水文站2010年7月16 ~17日瞬时流量过程,日平均流量采用加权公式计算。在单元格D16 栏输入公式=SUMPRODUCT( D2:D15,E2: E15) /48* 8.64,表示D、E 两个数组的所有元素对应相乘,然后把乘积相加,即( 36.2* 3 +37.4* 4 +… + 85.3* 8 + 79.4* 4) /48* 8.64 =940.9 ×104m3,就以瞬时流量过程计算得到一日洪量。在单元格E16栏输入上述四舍六入公式,即=sslr( D16) ,可得到数据处理后的成果。英雄桥水文站时段洪量计算表见表2。
表2 英雄桥水文站时段洪量计算表
过来许多从事水文工作的人员在解决水文数据处理问题时,都是具体问题具体编程解决,缺乏可移植性,重复工作量大,可操作性差。本文运用了集成软件Office 组件之一的Execl 几个常用函数进行处理,通过大量数据试算,并考虑到了各种不同类型的数据,没有发现明显的问题。当然,水平有限,而且只是笔者的一点经验之谈,旨在抛砖引玉,但愿能让广大水文专业技术人员从中得到启发,掌握更多的Execl 函数应用到水文数据处理上来。
[1]河海大学,武汉大学.工程水文学[M]. 北京: 中国水利水电出版社,2000:117 -119.
[2]南京大学,中山大学.普通水文学[M]. 北京:人民教育出版社,1978:79 -166.
[3]东方人华. Office2000 中文版入门与提高[M]. 北京: 清华大学出版社,1999.
[4]长江流域办水文处. 水文计算图表[Z].1980:1 -30.
[5]GB 8170—87 数值修约规则[S]. 北京:中国标准出版社,1988.
[6]SL 247—1999 水文资料整编规范[S]. 北京: 中国水利水电出版社,2001.