MSSQL 保留小数位数的方法

 

ROUND

语法:ROUND ( numeric_expression , length [ ,function ] )

     那么用到四舍五入并且保留小数点时我们肯定会首选ROUND函数,  如果字段的数据类型是decimal(18,10)时那么四舍五入后还会有很多0出现。

参数说明:

numeric_expression
是精确或近似数值数据类型类别(bit 数据类型除外)的表达式 。

length
它是 numeric_expression 的舍入精度 。 length 必须是 tinyint、smallint 或 int 类型的表达式 。如果 length 为正数,则将 numeric_expression 舍入到 length 指定的小数位数 。 如果 length 为负数,则将 numeric_expression 小数点左边部分舍入到 length 指定的长度 。

函数
要执行的操作的类型。 function 的数据类型必须是 tinyint、smallint 或 int 。如果 function 省略或其值为 0(默认值),则对 numeric_expression 进行舍入。 如果指定了 0 以外的值,则将截断 numeric_expression 。

在微软中查询时注意一点:

ROUND 始终返回一个值。 如果 length 为负数,并且大于小数点前的数字个数,则 ROUND 将返回 0 。

例 :

ROUND(748.58, -4)结果 :0
ROUND(748.58, -2)结果:700.00

更多例子(摘自微软官方,我在SQL2008R2上已经测试一致):

示例结果
ROUND(748.58, -1)750.00
ROUND(748.58, -2)700.00
ROUND(748.58, -3)

导致算术溢出,因为 748.58 默认为 decimal(5,2),它无法返回 1000.00。

在查询 管理器中的反馈为:将 expression 转换为数据类型 numeric 时出现算术溢出错误。

示例(摘自软件官方)

A. 使用 ROUND 和估计值

以下示例显示了两个表达式,阐释使用了 ROUND 后,最后一位数将始终为估计值。

复制

SELECT ROUND(123.9994, 3), ROUND(123.9995, 3);  
GO  

下面是结果集:

复制

----------- -----------  
123.9990    124.0000      

B. 使用 ROUND 和舍入近似值

以下示例显示舍入和近似值。

复制

SELECT ROUND(123.4545, 2), ROUND(123.45, -2);  

下面是结果集:

复制

----------  ----------
123.4500    100.00

C. 使用 ROUND 截断

以下示例使用了两个 SELECT 语句,用于阐释舍入和截断之间的区别。 第一个语句舍入结果。 第二个语句截断结果。

复制

SELECT ROUND(150.75, 0);  
GO  
SELECT ROUND(150.75, 0, 1);  
GO  

下面是结果集:

复制

--------  
151.00  
  
(1 row(s) affected)  
  
--------  
150.00  
  
(1 row(s) affected)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lypingfan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值