设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1312|回复: 0

SQL Server 数据处理小技巧, 合理取舍小数位

[复制链接]

23

主题

182

金钱

295

积分

入门用户

发表于 2019-6-13 14:23:33 | 显示全部楼层 |阅读模式

当对金额进行操作的时候, 对于小数处理不尽相同. 可能向上取整,可能向下取整,亦可能四舍五入取整, 也有可能保留或舍弃一部分小数.

四舍五入 : ROUND 函数
1. 四舍五入取整: ROUND(val, 0)    直接四舍五入val中小数

  1. SELECT ROUND(12.45, 0)  -- 结果 : 12.00
  2. SELECT ROUND(12, 0)     -- 结果 : 12
复制代码


2. 四舍五入保留固定小数: ROUND(val, a)    四舍五入精确到val右a位, 或者左a位(a为负数)

  1. SELECT ROUND(12.345,2)   --结果 : 12.350
  2. SELECT ROUND(154.36,-1)  --结果 : 150.00
  3. SELECT ROUND(154.36,-2)  --结果 : 200.00
复制代码


向上向下取整 : CEILING(val) / FLOOR(val)
1. 对于向上取整 CEILING(val), 只要val有任意一个小数位不为0, 即向上取整.
  1. SELECT CEILING(12.000)   --结果 : 12
  2. SELECT CEILING(12.001)   --结果 : 13
  3. SELECT CEILING(12.345)   --结果 : 13
复制代码


2. 向下取整 FLOOR(val) , 无论val中小数是不是为0 全部舍弃掉

  1. SELECT FLOOR(12.000)     --结果 : 12
  2. SELECT FLOOR(12.543)     --结果 : 12
复制代码


以上为基本的四舍五入与取整操作, 但是实际工作中不一定满足工作需求, 比如Action: 保留2位小数向下取整 (舍弃掉2位小数后的所有小数).
由于SQL Server中 Ceiling 和 Floor 函数 不能像Oracle中直接可以设置取整的小数位. 所以对于向上下取整且保留固定小数位解决办法:

方法1 : SELECT CEILING(12.345 * 100) / 100
方法2 : SELECT LEFT(12.345, CHARINDEX('.', 12.345) + 2)

注意
: 方法1的结果为: 12.340, 而方法2的结果为: 12.34.
同样对于四舍五入保留小数的时候Round函数同样也会出现舍弃的小数补零的情况, 代替办法可以为:
SELECT CONVERT(decimal(18,2), 12.356)
利用Convert方法转换结果为: 12.36, 末尾不会出现补零现象, 如果使用Round(12.356, 2), 结果会为12.360.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表