Sql 中两个数除法计算结果等于0原因是什么?

本文探讨了在SQL Server中遇到的精度问题,如何因整数除法导致意外结果。通过实例展示如何通过加小数点或类型转换解决138/365结果为0的问题,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

今天执行一个存储过程的时候, 发现执行结果和预期的结果不一致, 但是存储过程并没有发生错误!于是就一句一句的去查找问题,最后发现是在对两个数字进行除法计算的时候产生的问题。我惊奇的发现 138 / 365 竟然等于 0。 我第一反应就是精度的问题(毕竟javaScript 也有类似的问题)。

来验证一下这个结论:
Sql 中两个数除法计算结果等于0原因是什么?
结果显而易见, 就是由于计算精度造成的。这是因为SQL Server会自动根据除数与被除数的最大精度去对运算结果取精度,这里的除数和被除数都是整数,所以得到的结果也是整数

如果不信, 我们再来试试
Sql 中两个数除法计算结果等于0原因是什么?

解决办法

可以通过在整数后面加上.0 来改变精度。也可以通过 Convert 函数来讲整数转换成其他的类型后进行计算。

-- 方法一
SELECT  138.0 / 365.0 Result1

--方法二
SELECT  ( CONVERT(FLOAT, 138) / CONVERT(FLOAT, 365) ) Result2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖太乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值