SQL中除法计算保留整数或几位小数(除法那些事儿!) 您所在的位置:网站首页 科学计数法怎么计算除法 SQL中除法计算保留整数或几位小数(除法那些事儿!)

SQL中除法计算保留整数或几位小数(除法那些事儿!)

2024-02-29 08:55| 来源: 网络整理| 查看: 265

一、前言

    在写Sql 的时候遇到个问题,两个整数 int 类型相除,我希望保留两位小数。

二、问题解决

1、知识普及:

select 10/3 -->3 select 10%3 -->1 select 11/4 -->2 select 11%4 -->3

 / 符号是取整,% 符号是取余。在上面的例子中,清晰的展示了它们的作用。需要注意的是 / 取整符号是直接截断的,11除于4结果应该是2.75,取整后就是2,由此可看出它是不会四舍五入的。

2、步入正题:

方法有三种:cast、convert 和 round。这里用10除于3举例。

(1)CAST函数

    比较常用的就是CAST函数了,这里就是先将 int类型的 10 转换成了 float ,再去除于3,得出的结果就有无限小数,第一种写法比较特别,刚开始我也没看懂,怎么会多了一个点?!直到看到第二种写法才恍然大悟,只是它将小数位省略不写而已。结果是一样的。

select CAST(10*1./3 as decimal(8,2)) -->3.33 select CAST(10*1.0/3 as decimal(8,2)) -->3.33

(2)CONVERT函数

    这种功能上和cast 类似,就是写法不同而已。

select CONVERT(decimal(8,2),10*1./3) -->3.33 select CONVERT(decimal(8,2),10*1.0/3) -->3.33

(3)ROUND函数

    最后就是ROUND函数了,保留是保留了,但保留的是两位有效的小数,后面的很多个零就是根据默认类型自动填充的。

select ROUND(10*1./3,2) -->3.330000 select ROUND(10*1.0/3,2) -->3.330000

要去掉的话也方便,再丢回到前两个函数中转换一下即可,如:

select CONVERT(decimal(10,2),ROUND(10*1.00/3,2))  -->3.33

      这方法看似多此一举,但也有他的用处。CAST函数和CONVERT函数都是自动四舍五入的,而ROUND函数有一个参数,设置非0的数后,就会变成直接截断。这里拿11除于4来举例会比较清晰,如下:

select ROUND(11*1.0/4,1) -->2.800000 select ROUND(11*1.0/4,1,6) -->2.700000

      如果这个地方不是很理解,可以先参考我之前的一篇博客 “SQLServer中 ROUND函数、CAST 和 CONVERT函数 的使用详解”。

      就先写到这,哈哈!一个小问题被我复杂化了,不喜勿喷。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有