numeric 数据类型如何四舍五入

时间:2020-12-06 09:46:31
我在sql表中用money数据类型的时候,设定小数位为三位,如果超过三位,会四舍五入,如果我用numeric,也设置小数位为三位,却不会会四舍五入,有什么办法吗?

23 个解决方案

#1


四舍五入用系统函数 Round()

例:
declare @n numeric(8,3)
set @n = 123.456
print Round(@n,2)
set @n = 654.321
print Round(@n,2)

#2


在sql2005中numeric截取位数时 是自动舍入的!!
如楼上例!

declare @n numeric(8,2) 
set @n = 123.456 
print Round(@n,2) 
set @n = 654.321 
print @n


------------
123.46
654.32

#3


用Round()函数。。

#4


round or str()

#5


declare @n numeric(8,2) 
declare @m numeric(8,2)
set @m= 123.456 
set @n = 654.321
print @n
print  @m
------

654.32
123.46


#6


用cast(col as decimal(18,2))
--用convert/cast转换就行了,数据类型的函数比较多

#7


round()

#8


我在sql表中用money数据类型的时候,设定小数位为三位,如果超过三位,会四舍五入,如果我用numeric,也设置小数位为三位,却不会会四舍五入,有什么办法吗? 
-------------------------
怎么可能!四舍五入都不会,decimal还能称为精确数?

declare @1 decimal(10,3),@2 decimal(10,3)
set @1=1.33333333
set @2=1.33350001
select @1,@2
/*
1.333 1.334
*/

#9


哦!谢谢大家,四舍五入我当然会,我的疑问是,我直接在表中录入数据,如果是money数据类型,是会自动四舍五入的,如果是numeric数据类型,却不会.如何做到跟monery类型一样的效果.因为我不想用查询的方式实现.

#10


直接在表中录入数据?
怎么录入,在企业管理器中?

#11


楼上的都肯定了numeric类型也是自动舍入的,那就是自动的。

#12


建表或创建字段时就把数据类型设为numeric(18, 3)

#13


用了yimi_love,的方法不行,也是自己截断.在表中不会四舍五入.

#14



set numeric_roundabort off

#15


yimi_love的方法和free1879的方法结合就可以了

#16


不行呀!!大家有试过吗?

#17


是这样子的,我有一个入库单明细表,要用到一上数量的字段(numeric(18, 3)),在客户端中输入数据后,我希望在表中保存的数字保留四舍五入的3位小数,但是在表中虽然保存的是有三位小数,但不会四舍五入,只是截断了.

#18


但是如果用money数据类型,就可以得到我要求的正确的结果.但不知为什么numeric不可以呢?

#19


declare @i numeric(18,5)
set @i=15.87654

select cast(@i as numeric(18,3))


                     
-------------------- 
15.877

(所影响的行数为 1 行)

#20


我是想保存在数据库表里就自动四舍五入.

#21


四舍五入用系统函数 Round() 

#22


可能是你那的问题,
不用money的话
就在前台处理

#23


round()函数呀,看自带帮助吧,很全的。

#1


四舍五入用系统函数 Round()

例:
declare @n numeric(8,3)
set @n = 123.456
print Round(@n,2)
set @n = 654.321
print Round(@n,2)

#2


在sql2005中numeric截取位数时 是自动舍入的!!
如楼上例!

declare @n numeric(8,2) 
set @n = 123.456 
print Round(@n,2) 
set @n = 654.321 
print @n


------------
123.46
654.32

#3


用Round()函数。。

#4


round or str()

#5


declare @n numeric(8,2) 
declare @m numeric(8,2)
set @m= 123.456 
set @n = 654.321
print @n
print  @m
------

654.32
123.46


#6


用cast(col as decimal(18,2))
--用convert/cast转换就行了,数据类型的函数比较多

#7


round()

#8


我在sql表中用money数据类型的时候,设定小数位为三位,如果超过三位,会四舍五入,如果我用numeric,也设置小数位为三位,却不会会四舍五入,有什么办法吗? 
-------------------------
怎么可能!四舍五入都不会,decimal还能称为精确数?

declare @1 decimal(10,3),@2 decimal(10,3)
set @1=1.33333333
set @2=1.33350001
select @1,@2
/*
1.333 1.334
*/

#9


哦!谢谢大家,四舍五入我当然会,我的疑问是,我直接在表中录入数据,如果是money数据类型,是会自动四舍五入的,如果是numeric数据类型,却不会.如何做到跟monery类型一样的效果.因为我不想用查询的方式实现.

#10


直接在表中录入数据?
怎么录入,在企业管理器中?

#11


楼上的都肯定了numeric类型也是自动舍入的,那就是自动的。

#12


建表或创建字段时就把数据类型设为numeric(18, 3)

#13


用了yimi_love,的方法不行,也是自己截断.在表中不会四舍五入.

#14



set numeric_roundabort off

#15


yimi_love的方法和free1879的方法结合就可以了

#16


不行呀!!大家有试过吗?

#17


是这样子的,我有一个入库单明细表,要用到一上数量的字段(numeric(18, 3)),在客户端中输入数据后,我希望在表中保存的数字保留四舍五入的3位小数,但是在表中虽然保存的是有三位小数,但不会四舍五入,只是截断了.

#18


但是如果用money数据类型,就可以得到我要求的正确的结果.但不知为什么numeric不可以呢?

#19


declare @i numeric(18,5)
set @i=15.87654

select cast(@i as numeric(18,3))


                     
-------------------- 
15.877

(所影响的行数为 1 行)

#20


我是想保存在数据库表里就自动四舍五入.

#21


四舍五入用系统函数 Round() 

#22


可能是你那的问题,
不用money的话
就在前台处理

#23


round()函数呀,看自带帮助吧,很全的。