sqlserver round 无法保留位数解决方案

alexlee 2024-1-24 269 1/24

最近做项目,由于项目上要开发报表,特意进行了开发,不巧的是,居然发现了一些细节上的小问题,这里我们就来简单记录一下。

那就是两个数据值相除,为什么明明有小数位,却得出了整数位。这便是我们报表开发中比较常见的问题,这里我们可以这样认为。

毕竟里边的数据类型是定死的,并不像我们人类这么智能,可以很清楚的认识到,除出来的数据是要保留小数位的。

那我们简单了解下,数据库数据类型的概念 如下:

数据类型是代表这个字段是以哪种方式存储在数据中,分别占用的字符是不一样的,不同方式,得到的结果也是不一样的。

这就是我们两个数相除,会得出不同结果的原因,也就是我们必须掌握跟了解的数据类型概念。

如下案例:

DECLARE @aaint INT
set @aaint=1234
SELECT ROUND(@aaint,2), CAST(@aaint AS NUMERIC(18,2))

sqlserver round 无法保留位数解决方案

通过图片里边,我们可以看到 ROUND(@aaint,2) 这个是无法保留小数点的,知道这是为什么吗?

其实在写报表的情况下,我们总会遇到这样的问题,有时候报表语句很多,但查出来的结果,确不是我们想要的结果。

那其实这里的原理是很简单的,但是写报表的sql一多,有时候我们就会找不到问题所在。

以上问题是因为 @aaint 是个整型来着,所以保留小数就不起作用了,大家看到转换成数字类型的时候,就可以成功保留小数位。

所以,有时候当你在报表对数的时候,你就会发现,为什么没有小数位了,那是因为两个整型的数值相除,还是整型,不会有小数位出来。

二.

SELECT 100/3
SELECT CAST(100*1.0/3 AS NUMERIC(18,2))

sqlserver round 无法保留位数解决方案

看到结果,大家应该就瞬间明白了,100/3 都是整型,直接得出33。

这里取巧的方法,直接100*1.0/3 直接将100转成数字型的,就可以得出小数位,这种方法在开发中是经常用到的。

所以在做计算的时候,大家要注意字段的类型,也要懂得一些处理方式,要知道这种情况是哪里问题引起的。

特别是做报表的时候,最后一定要懂得检验数据的准确性,也就是所谓的校对数据,这步骤是相当重要的,毕竟客户最后要看到的是准确的数据报表,这才是做报表的意义。

以上是自己的做为资深开发的一些个人经历,把这些经验分享给大家,希望以后大家在从事开发中,可以避免不必要的麻烦,跟浪费时间精力。

要是大家喜欢我的文章的话,可以在文章下留言或是联系我,共同进步,共同探讨开发的一些案例,促进彼此间的交流,分享一些日常的开发趣事。

- THE END -
最后修改:2024年7月23日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论