截断(不舍入)SQL Server中的小数位
时间:2020-03-05 18:47:41 来源:igfitidea点击:
我试图确定截断或者删除SQL中多余的小数位而不舍入的最佳方法。例如:
declare @value decimal(18,2) set @value = 123.456
这将自动将@Value舍入为123.46 ....在大多数情况下是好的。但是,对于这个项目,我不需要。有没有一种简单的方法可以截断我不需要的小数?我知道我可以使用left()函数并将其转换回十进制...还有其他方法吗?
解决方案
回答
select convert(int,@value)
回答
select round(123.456, 2, 1)
回答
我们是否想要小数?
如果没有,请使用
select ceiling(@value),floor(@value)
如果我们将其设为0,则进行一轮:
select round(@value,2)
回答
ROUND ( 123.456 , 2 , 1 )
当第三个参数!= 0时,它会截断而不是舍入
http://msdn.microsoft.com/zh-CN/library/ms175003(SQL.90).aspx
句法
ROUND(numeric_expression,length [,function])
争论
- numeric_expression是精确数字或者近似数字数据类型类别的表达式,比特数据类型除外。
- length是numeric_expression要四舍五入到的精度。 length必须是tinyint,smallint或者int类型的表达式。当length为正数时,numeric_expression将舍入为length指定的小数位数。当length为负数时,numeric_expression在小数点的左侧舍入,如length所指定。
- 功能是要执行的操作的类型。函数必须是tinyint,smallint或者int。如果省略函数或者值为0(默认值),则会对numeric_expression进行四舍五入。当指定非0的值时,numeric_expression被截断。
回答
这是我能够截断而不是四舍五入的方法:
select 100.0019-(100.0019%.001)
返回100.0010
和你的例子:
select 123.456-(123.456%.001)
返回123.450
现在,如果我们想摆脱结尾的零,只需将其强制转换为:
select cast((123.456-(123.456%.001)) as decimal (18,2))
返回123.45
回答
另一个截断没有四舍五入的解决方案和示例。
Convert 71.950005666 to a single decimal place number (71.9) 1) 71.950005666 * 10.0 = 719.50005666 2) Floor(719.50005666) = 719.0 3) 719.0 / 10.0 = 71.9 select Floor(71.950005666 * 10.0) / 10.0
回答
SELECT Cast(Round(123.456,2,1) as decimal(18,2))
回答
请尝试使用此代码将一个点后的3个十进制值转换为2个小数位:
declare @val decimal (8, 2) select @val = 123.456 select @val = @val select @val
输出为123.46
回答
Mod(x,1)是我认为的最简单的方法。
回答
回合具有可选参数
Select round(123.456, 2, 1) will = 123.45 Select round(123.456, 2, 0) will = 123.46
回答
我想你只想要十进制值,
在这种情况下,我们可以使用以下方法:
declare @val decimal (8, 3) SET @val = 123.456 SELECT @val - ROUND(@val,0,1)
回答
这将删除任何数字的小数部分
SELECT ROUND(@val,0,1)