APP下载

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

2020-07-03曹殿涛

科学与信息化 2020年13期
关键词:改进运算建议

摘 要 本文分析了MSSql数据库除法运算结果,指出MSSql数据库一个整数除以另一个整数,结果只保留整数,小数部分被舍去,不是通常意义上的除法,概念表达与实际结果名实不符,并就此提出了改进建议。

关键词 MSSql数据库;除法;运算;结果;改进;建议

1问题的提出

2/4等于几?3/2等于几?这是个小学算术问题,答案很简单, 2/4=0.5, 3/2=1.5,但是,在MSSql数据库,你会感到很奇怪!2/4=0,3/2=1,这是为什么?

首先看一个示例,图1,在MSSql数据库:

(脚本在MSSql2000,2005,2012调试通过)

是不是感到奇怪,运算结果怎么没有小数呢?.5去哪里了?

2问题的解释

通过查阅MSSql数据库联机帮助我们可知, MSSql算术运算符除法之结果返回优先级较高的参数的数据类型,如果用一个整数除以另一个整数,其结果是一个整数,小数部分被截断,也就是说,在MSSql数据库, 一个整数除以另一个整数,其结果是小数部分被舍去,只要整數结果,所以,在MSSql数据库平台,2/3=0,3/2=1[1]。但不是两个整数相除呢?我们看一个示例,如图2:

(脚本在MSSql2000,2005,2012调试通过)

因为float优先级高于INT,那么,除法结果就返回float,小数部分没有被截断,能看到大家所熟悉的除法运算结果。

由上所述可知,在MSSql数据库,一个整数除以另一个整数,其结果是一个整数,小数部分被舍去,和通常的除法不一样,但MSSql数据库的整数与其它非整形数(如float)进行除或被除运算,运算结果保留小数,和通常的除法一样。

在MSSql数据库,怎样实现两个整数相除返回结果为大家所熟悉的计算结果——带小数的结果呢?

我们看一个示例:图3

这个方法是通过CAST函数将位于分子(分母)的整形数强行变换为float,从而实现了除法结果保留小数。

我们再看一个示例,如图4:

(脚本在MSSql2000,2005,2012调试通过)

这个方法是通过分子(分母)乘1.0或加0.0的方式,将原整数强行变为浮点二进制,从而实现了除法结果保留小数。

笔者是在编写机车乘务员工作成绩有关软件的过程中发现此问题的,笔者用机车的往公里除以返公里之结果作为机车往、返、还是折返的依据,机车的往返公里都是整数且不为零,结果发现有的机车往公里除以返公里之结果是零,怎么会是零呢?通过研究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] 姚永一.SQL Server数据库实用教程[M].北京:电子工业出版社,2010:59.

作者简介

曹殿涛(1962-),男;职称:高级工程师、信息系统项目管理师、信息系统集成高级项目经理,现就职单位:国家铁路集团北京局集团有限公司,研究方向:信息技术在铁路机务系统的应用。

猜你喜欢

改进运算建议
长算式的简便运算
加减运算符号的由来
“整式的乘法与因式分解”知识归纳
关于不做“低头族”的建议
论离婚损害赔偿制度的不足与完善
高校安全隐患与安全设施改进研究
“慕课”教学的“八年之痒”
浅析秦二厂设计基准洪水位提升对联合泵房的影响
三代人的建议
FOOD