截断(不舍入)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)