首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么SQL Server会舍弃除以两个整数的结果?

在SQL Server中,当执行除法操作时,如果两个整数相除,结果可能会被舍弃。这是因为SQL Server默认会将除法操作的结果转换为整数,而不是保留小数部分。

例如,如果执行以下查询:

代码语言:txt
复制
SELECT 5 / 2

SQL Server将返回结果2,而不是2.5。

为了解决这个问题,可以将其中一个或两个整数转换为浮点数,以便保留小数部分。例如:

代码语言:txt
复制
SELECT 5.0 / 2

将返回结果2.5。

总之,SQL Server在执行除法操作时可能会舍弃除法结果的小数部分,因此需要确保至少有一个操作数是浮点数,以便保留小数部分。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JAVA位移运算「建议收藏」

1、java将负整数转成二进制 这里以8位为例,只是为了表明过程,实际中java的int类型是4byte,也就是32位。...2、位移运算 1)正数的右移:如10 >> 2,左边自动补0,右边移出位舍弃,即00001010 –> 00000010,结果是2,实际的意思是,每向右移动一位,就相当于除以2,小数舍弃,即10/2/2...=2.5,舍弃小数,结果就是2。...2)正数的左移:如10 舍弃,即00001010 –> 00101000,结果是40,实际的意思是,每向左移动一位,就相当于乘以2,即1022=40。...3)负数的右移:如-2 >> 2,由于二进制的首位为符号位,负数在右移过程中,为了保持负数的特性,所以左边会自动补1而不是0,即11111110–> 11111111,结果为-1。

61320

聊聊 MySQL 网络缓冲区、net_buffer_length、max_allowed_packet 那些事

发送执行结果给客户端,可能会先把执行结果暂存到连接缓冲区,待缓冲区满再一次性发送。 后面会解释为什么是可能,而不是一定把执行结果暂存到连接缓冲区。...SQL 语句很长的时候,不也就是发和收吗,为什么就会更复杂? 这就像我们写代码的时候一样,如果不考虑高并发,写起来很简单,一旦要考虑高并发,就需要缓存、分布式、微服务等各路神仙通通上马了。...实际上源码中,处理的逻辑要更复杂一些,我这里舍弃了小部分细枝末节,不然就变成了描述代码流程,那看起来就很费劲了。 为什么执行结果数据大于连接缓冲区大小时就不使用连接缓冲区了?...举例说明:假设 my.cnf 中配置 net_buffer_length = 2047,那么计算逻辑为:(2047 / 1024) * 1024 = 1024,因为在 c 语言中,两个整数相除得到的结果也是整数...总结 本文主要介绍了 MySQL net_buffer_length 背后的两个缓冲区:连接缓冲区、结果集缓冲区,并介绍了这两个缓冲区的自动增长逻辑,以及它们的上下限。

66930
  • 【基础教程】Python算术运算符及用法详解

    //表示整除,只保留结果的整数部分,舍弃小数部分;注意是直接丢掉小数部分,而不是四舍五入。...当有小数参与运算时,//结果才是小数,否则就是整数。 需要注意的是,除数始终不能为 0,除以 0 是没有意义的,这将导致 ZeroDivisionError 错误。...在某些编程语言中,除以 0 的结果是无穷大(包括正无穷大和负无穷大)。...Python 2.x 中的除法 Python 2.x 只提供了一种除法运算,就是/,它的行为和大部分编程语言中/的行为是一样的: 当/两边都是整数时,结果始终是整数;如果不能除尽,就直接舍弃小数部分。...% 求余运算符 Python % 运算符用来求得两个数相除的余数,包括整数和小数。Python 使用第一个数字除以第二个数字,得到一个整数的商,剩下的值就是余数。

    84820

    c语言位运算符的用法_c语言中位运算符及其含义

    (均以二进制的补码形式) 整数;及只能是带符号或者无符号的char,short,int,long类型; 2;c语言中的6种位运算符; & 按位与——如果两个相应的二进制位都为1,则该位的结果值为...1,否则为0; | 按位或——两个相应的二进制位中只要有一个为1,该位的结果值为1; ^ 按位异或—— 若参加运算的两个二进制位值相同则为0,否则为1; ~ 取反 ——~是一元运算符,用来对一个二进制数按位取反...∧b的结果,a已变成7) (∧)b=100(2) b=011(2)(b∧a的结果,b已变成3) (∧)a=111(2) a=100(2)(a∧b的结果,a已变成4) //及实现了交换;...3.5;左移与右移; 左移舍弃的高位中不包含1的情况。...右移>>是除; 8的二次方;则等于32; 8>>2——8除以2的二次方;则等于2; 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    1.1K10

    Java移位运算符

    在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同...0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。...则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是3.数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。...("");   //右移   i >>=2; //i右移2为,把低位的两个数字(右侧开始)抛弃,高位整数补0,负数补1,二进制码就为0000000000000000000000000001100...若对byte或 short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。

    1.5K20

    程序员数学 —— 二进制

    平时生活中我们的计算基本都是基于 十进制,比如 1+2=3 ,5+6=11 有时候我们不禁也会想一下:为什么 1+2 会等于 3 呢?...适合位运算,针对位运算比平时的运算具有更高的效率 具有比较好的容错 和 抗干扰能力,多进制会导致状态增加,使得计算机识别状态的时候更加不容易控制。...2的(移动位数) 次方,当然这里结果是要求整数的 然后你以为移位就是这么简单么?...位运算 将两个二进制数字各个位上的数字进行运算即:位运算,一般可以分为以下几种: 与 参与操作的所有位中都必须是 1,其运算的结果才是 1,否则是 0; 计算操作符一般是 & scala>...1,其运算的结果就是 1,否则是 0; 计算操作符一般是 | ``` scala> 4 | 2 | 1 res25: Int = 7 ``` 异或 参与操作的所有位中不能相同,其运算的结果才是

    88720

    计算机程序的思维逻辑 (4) - 整数的二进制表示与位运算

    上节我们提到正整数相乘的结果居然出现了负数,要理解这个行为,我们需要看下整数在计算机内部的二进制表示。 十进制 要理解整数的二进制,我们先来看下熟悉的十进制。...其他类型的整数也类似,负数能多表示一个数。 负整数为什么采用补码呢? 负整数为什么要采用这种奇怪的表示形式呢?原因是:只有这种形式,计算机才能实现正确的加减法。...就是这样的,看上去可能比较奇怪和难以理解,但这种表示其实是非常严谨和正确的,是不是很奇妙? 理解了二进制加减法,我们就能理解为什么正数的运算结果可能出现负数了。...移位有: 左移:操作符为的低位补0,高位的就舍弃掉了,将二进制看做整数,左移1位就相当于乘以2。 无符号右移:操作符为>>>,向右移动,右边的舍弃掉,左边补0。...有符号右移:操作符为>>,向右移动,右边的舍弃掉,左边补什么取决于原来最高位是什么,原来是1就补1,原来是0就补0,将二进制看做整数,右移1位相当于除以2。

    1.1K90

    深入理解位运算符及其在JavaScript中的应用

    常见位运算符 运算符 描述 运算规则 & 按位与 and 两个对应的二进制位都为 1 时,结果为 1,否则为 0 | 按位或 or 两个对应的二进制位有一者为 1 时,结果为 1,否则为 0 ^ 按位异或...XOR 两个对应的二进制位相异时,结果为 1,否则为 0 ~ 按位取反 reverse 对原码进行取反运算,1 变为 0,0 变为 1 << 左移 n 位 move left 将二进制位左移 n 位,...• 用途: function clearWithBitwiseAnd(number) { const zeroMask = 0; // 创建一个各位都是0的整数作为掩码 const clearedNumber...^ 异或运算 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0 • 总结:参加运算的两个对象,如果两个相应位相同为0,相异为1。...• 操作数每右移一位,相当于该数除以2。 原码,补码,反码 • 计算机中的有符号数有三种表示方法,即原码,补码,反码。

    12710

    【0基础学Python】基础语法Part1

    print(1+2/3) 熟悉 C / Java 的同学可能认为, 2 / 3 结果为 0 (小数部分被截断). 但是在 Python 中得到的结果则是 一个小数. 更符合日常使用的直觉。...变量和类型 python无需声明变量类型,会自动确定你所写的变量的类型。 变量的语法 (1)定义变量 a = 10 创建变量的语句非常简单, 其中 a 为变量名....变量名大小写敏感. num 和 Num 是两个不同的变量名. 除了以上规则,应尽量变量名有意义化,规范化,使用学习命名方法。...为什么要有这么多类型 类型决定在内存中占据的空间 类型决定其对变量能做什么样的操作 对变量进行归类 动态类型 在 Python 中, 一个变量是什么类型, 是可以在 “程序运行” 过程中发生变化的....,整数除以整数,结果还是整数(舍弃小数部分,向下取整) 关系运算符 关系符合返回True,不符合返回False 关系运算符除了整数/浮点数的比较,还可以对字符串进行比较,按照字典序 关于字典序: 想象一个英文词典

    3000

    《深入理解计算机系统》阅读笔记--信息的表示和处理(下)

    21 对16 求余 得到5是一致的 这个时候我们在来看上面的公式原理,其实就是当你两个数相加已经超过了最大位数的时候,最高位就会被舍弃,即当结果溢时需要舍弃最高位的值 无符号求反  还是先看原理: ?...中间的移位表示要有几个移位,后面的加法/减法表示做几次加法或者减法 除以2的幂 大多数机器上,整数除法要比整数乘法更慢,需要30个或者更多的时钟周期 除以2的幂也可以用移位运算来实现,不过这里用的是右移...下面是在12340的16位表示上执行逻辑右移的结果对它执行逻辑右移的结果,以及对它执行除以1,2,16,和256的结果 ? ?...1,所以结果会向零舍入 关于整数运算的小结 计算机执行的整数运算实际上是一种模运算形式,表示数字的有限字长限制了可能的值的取值范围,结果可能溢出。...并且可以看到除以2 就相当于右移,并且可以横跨小数点 当时这种表示是有问题的,如:x/2的k次方的数可以精确表示,其他数字会变成循环小数 如1/3 = 0.0101010101[01]....

    1.3K30

    时间精度引起MySQL主从不一致问题剖析

    这里引擎层落盘数据和sql层转换拼接还原sql语句写入binlog是两个独立的过程,因此,如果sql层和引擎层对精度处理逻辑不一致,innodb引擎层对秒以下做四舍五入,而sql层直接舍弃秒以下精度,那么就可能造成这个问题...   /*     sint2korr(A) (int16) (((int16) ((uchar) (A)[0])) + ((int16) ((int16) (A)[1]) << 8))     把两个字节所表示的整数还原出来...整个逻辑可以非常清楚的看到,sql层在处理这种情况传过来的时间参数时,直接把时间的秒以下精度舍弃生成一个时间字符串,给binlog和general_log还原问号生成sql语句,因此binlog中的时间只会比传过来真实时间小...三、InnoDB引擎时间处理         上面已经证明了猜测的一半,sql层还原语句时直接丢弃了秒以下的精度。从实际结果上来看,innodb层应该是做了四舍五入,究竟是不是这么做的?...总结         真实原因和假设的一样,sql层和引擎层处理精度逻辑不一样,一个直接舍弃,一个四舍五入,造成了部分数据相差一秒的情况,有的时候,合理的假设往往能做到有的放矢,避免乱碰乱撞,达到事半功倍的效果

    2.6K20

    javaScript的Math数学对象 --用法大全

    Math.ceil(3.2) // 4 Math.ceil(-3.2) // -3 同学们注意了,这里有一个坑需要注意:如果你想舍弃掉小数部分,许多人往往会采用Math.floor()方法,那就错了...这个时候高手就会想到用三元运算符,一气呵成,菜鸟就总想着用if……else判断,仿佛如果美妙的歌唱般习惯性的if…… “假如时光到流我能做什么,找你没说的却想要的,假如我不放手你多年以后,会怪我恨我或感动...然后 -1.1呢,说是四舍五入,所以就舍弃了0.1,但是因为是负数啊,舍弃了小数位反而是增加了值,所以看上去有些别捏,不合常理。最后呢-1.6,你说该怎么个取舍法?...) // 2.302585092994046 如果要计算以10为底的对数,可以先用Math.log求出自然对数,然后除以Math.LN10;求以2为底的对数,可以除以Math.LN2。...0 - max之间,为什么呢?

    65050

    恕我直言,阶乘相关的面试题你还真不一定懂!

    本文将分享几道与阶乘相关的案例,且难度递增。 案例一 给定一个整数 N,那么 N 的阶乘 N! 末尾有多少个 0?例如: N = 10,则 N!= 3628800,那么 N! 的末尾有两个0。...的值,然后用除以 10 来判断多少个 0 就可以了。 有些人则这样想,直接算 N!...这下好了,这道阶乘的题,难度顿时上升了,说实话,我敢保证大部分人还真没去实现过。所以,今天我就带大家来实现一下,以防以后真的被问到。结果最熟悉的题顿时不知道怎么下手好。...这个时候,我们就必须用字符串来存放所求的值的,在相乘的时候也是用字符串来相乘,说白了,就是要会求两个大整数相乘。 下面我们先来实现一个求两个大整数相乘的函数。...知道了两个大整数相乘之后,我们再来算我们的阶乘,就好做了,我们每次相乘的时候,只需要把它当作两个大整数重复乘就可以了。

    1.2K40

    Java左右移运算符

    前言本文主要介绍的是关于java中常用的基本运算——位运算符左移,右移,为什么要说这个,因为在开发过程成中有时候会用到一些运算,我们都会使用*或者/的基本运算,但是运用数学的基本运算是很耗效率的,而位运算就是计算机运算...左运算(的位数,高位移出(舍弃),低位的空位补零。...,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。...则得到的最终结果是0000 1100,则转换为十进制是12。数学意义: 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。...则得到的最终结果是0000 0010。转换为十进制是2。数学意义: 右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余数就不要了。

    17410

    提供6种优化的方案!

    在MySQL的limit中:limit 100,10MySQL会根据查询条件去存储引擎层找到前110条记录,然后在server层丢弃前100条记录取最后10条这样先扫描完再丢弃的记录相当于白找,深分页问题指的就是这种场景...:它会先根据二级索引定位到第一条满足age=18的记录由于二级索引上的记录没有完整字段,因此会回表查询聚簇索引获取完整字段将结果返回给server层,并根据这条记录的next找到下一条记录循环1-3的过程...从这里分析可以得到从两个方面进行优化:让它不要回表,避免回表的开销让它不要舍弃前XX条记录,避免白查询接下来结合不同的方法进行讨论覆盖索引避免回表当业务上允许时可以使用覆盖索引避免回表,查完二级索引就交给...SQL_NO_CACHE id,age,student_name from student where age = 18 limit 5000,10;虽然说覆盖索引依旧会舍弃前XX条记录,但没有回表的开销已经快了不少但如果业务上不允许还是要查较多在聚簇索引上的字段...id是有序的如果是原来的SQL使用这种做法会导致查询出来的结果不一致,因为在二级索引上当age = 18时主键不一定有序select SQL_NO_CACHE * from student where

    55522

    mysql运算符(一)

    : 1.一个整数类型的值对整数进行加法和减法操作,结果还是一个整数; 2.一个整数类型的值对浮点数进行加法和减法操作,结果是一个浮点数; 3.加法和减法的优先级相同,进行先加后减操作与进行先减后加操作的结果是一样的...SELECT employee_id,salary,salary * 12 annual_sal FROM employees; 由运算结果可以得出如下结论: 一个数乘以整数1和除以整数1后仍得原数...; 一个数乘以浮点数1和除以浮点数1后变成浮点数,数值与原数相等; 一个数除以整数后,不管是否能除尽,结果都为一个浮点数; 一个数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后4位; 乘法和除法的优先级相同...如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。 如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。...SQL语句示例如下: 可以看到,使用安全等于运算符时,两边的操作数的值都为NULL时,返回的结果为1而不是NULL,其他 返回结果与等于运算符相同。 3.不等于运算符 不等于运算符(和!

    17610

    千万别小看这些运算符背后的逻辑

    如果两个操作数都不是字符串或对象,则会进行算术加法运算(非数字的操作数会被强制转为数字)。 所以,不难得出上面列举的表达式的运算结果。...其实只要记住一条规则:对于==运算符,如果两个操作数是null或undefined,运算结果是true;否则,不管操作数的类型如何转换,==运算符最后都是数字的比较。...位运算符都是二进制的运算,并且是基于32位整数运算。所以十进制,十六进制的操作数都会先转为32位的二进制后再进行运算。...简单总结就是“低位舍弃,高位补符号位”。...我个人的想法是,应该是要回到移位运算的本质。 二进制表示的机器数在相对于小数点作n位左移或右移时,其实质就是该数乘以或除以2n(n=1,2, …, n)。

    76030

    c语言中位运算符的用法_c语言中位运算符的优先级

    “按位与”运算符& 运算规则:参加运算的两个运算量,如果两个数相应位的值都是1,则该位的结果值为1,否则为0。即:0 & 0 =0;0 & 1 =0;1 & 0 =0;1 & 1 =1。...“按位异或”运算符^ 运算规则:参加运算的两个运算量,如果两个数的相应位的值不同,则该位的结果值为1,否则为0。...【例】a的补码:00000000 01010010 b的补码: 01010101 01010101 ^ ——————- 结果的补码: 01010101 00000111 (2)交换两个值...【例】a的各位依次向左移2位,a的最高2位移出去舍弃,空出的低2位以0填补。...(2)对带符号数进行右移时,空出的高位全部以符号位填补。即正数补0,负数补1。这种右移称为算术右移。 右移1位相当于除以2,同样,右移n位相当于除以2n。

    81610

    位与进制

    64  关于上面的说明,这里还是补充一下,因为并不是所有人都了解位运算 的运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。...以11>>2为例,首先把11转换为二进制数字0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的两个数字移出,因为该数字是正数,所以在高位补零,则得到的最终结果是...奇:偶) 获取二进制位是1还是0 交换两个整数变量的值(t = a ^ b;a ^= t;b ^= t;) 不用判断语句,求整数的绝对值(a ^ (a >> 31)) + (a >>> 31) 结合律...请写程序找出这个只出现一次的数字  这道题比上一道题还简单,这道题直接将所有的值全部异或起来,得到的结果就是落单的数了 题3:二进制中1的个数  请实现一个函数,输入一个整数,输出该二进制表示中1的个数...(n & (n - 1)) == 0) 题5:将整数的奇偶位互换  假设这个数是9,二进制就是1001,那么得到的结果就是0110  首先我们需要两个个数 a = 0x55555555 b = 0xaaaaaaaa

    48710
    领券