关于MSSql数据库除法运算结果的改进建议

发表时间:2020/6/11   来源:《基层建设》2019年第36期   作者:曹殿涛
[导读] 摘要:本文分析了MSSql数据库除法运算结果,指出MSSql数据库一个整数除以另一个整数,结果只保留整数,小数部分被舍去,不是通常意义上的除法,概念表达与实际结果名实不符,并就此提出了改进建议。
        国家铁路集团北京局集团有限公司  河北石家庄  050200
        摘要:本文分析了MSSql数据库除法运算结果,指出MSSql数据库一个整数除以另一个整数,结果只保留整数,小数部分被舍去,不是通常意义上的除法,概念表达与实际结果名实不符,并就此提出了改进建议。
        关键词:MSSql数据库;除法;运算;结果;改进;建议
        1 问题的提出
        2/4等于几?3/2等于几?这是个小学算术问题,答案很简单,2/4=0.5,3/2=1.5,但是,在MSSql数据库,你会感到很奇怪!2/4=0,3/2=1,这是为什么?
        首先看一个示例,图一,在MSSql数据库:
       
        图一
        (脚本在MSSql2000,2005,2012调试通过)
        是不是感到奇怪,运算结果怎么没有小数呢?.5去哪里去了?
        2 问题的解释
        通过查阅MSSql数据库联机帮助我们可知,MSSql算术运算符除法之结果返回优先级较高的参数的数据类型,如果用一个整数除以另一个整数,其结果是一个整数,小数部分被截断,也就是说,在MSSql数据库,一个整数除以另一个整数,其结果是小数部分被舍去,只要整数结果,所以,在MSSql数据库平台,2/3=0,3/2=1。
        但不是两个整数相除呢?我们看一个示例,如图2:
       
        图2
        (脚本在MSSql2000,2005,2012调试通过)
        因为float优先级高于INT,那么,除法结果就返回float,小数部分没有被截断,能看到大家所熟悉的除法运算结果。
        由上所述可知,在MSSql数据库,一个整数除以另一个整数,其结果是一个整数,小数部分被舍去,和通常的除法不一样,但MSSql数据库的整数与其它非整形数(如float)进行除或被除运算,运算结果保留小数,和通常的除法一样。
        在MSSql数据库,怎样实现两个整数相除返回结果为大家所熟悉的计算结果——带小数的结果呢?
        我们看一个示例:图3
        这个方法是通过CAST函数将位于分子(分母)的整形数强行变换为float,从而实现了除法结果保留小数。
        我们再看一个示例,如图4:
        这个方法是通过分子(分母)乘1.0或加0.0的方式,将原整数强行变为浮点二进制,从而实现了除法结果保留小数。
       
        图3
        (脚本在MSSql2000,2005,2012调试通过)
       
        图4
        (脚本在MSSql2000,2005,2012调试通过)
        笔者是在编写机车乘务员工作成绩有关软件的过程中发现此问题的,笔者用机车的往公里除以返公里之结果做为机车往、返、还是折返的依据,机车的往返公里都是整数且不为零,结果发现有的机车往公里除以返公里之结果是零,怎么会是零呢?通过研究MSSql数据库的除法规则才发现,在MSSql数据库,一个整数除以另一个整数,运算结果是要截去小数只保留整数的,所以,在往公里小于返公里的情况下(分子小于分母),运算结果只保留整数而要截取小数,所以计算结果为零。
        为了使往公里除以返公里得到正确结果,笔者采用了分子(分母)加0.0的方式,强行使分子或分母变为浮点二进制,从而使机车往公里除以返公里得到包含小数的结果,便于进行机车往、返、折返的判断。
        3 改进建议
        我们首先研究一下VB.NET有关除法的具体规则。
        VB.NET有两个除法运算符。
        ‘/’,通常之除法,返回一个浮点结果,例如 2/4=0.5,3/2=1.5。
        ‘\’,整数除法,返回一个整数结果,截取小数,例如 2/4=0,3/2=1。
        通过比较可以发现,MSSql数据库除法运算符只有一个运算符,即‘/’运算符号,没有VB.NET整数除法的运算符号‘\’。
        由上分析可知,在MSSql数据库,一个整数除以另一个整数,结果只保留整数,小数部分被舍去,相当于VB.NET的整数除法操作,不是通常意义上的除法,概念表达与实际结果名实不符,毕竟除与整除是两个不同的概念,建议MSSql数据库对此进行改进。
        建议MSSql数据库对一个整数除以另一个整数的运算结果予以改进,在保留整数商的基础上,不再截取小数(或小数四舍五入亦可),使除法名实相符,不再混同于整除操作。
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: