我正在尝试确定在SQL中截断或删除额外的小数位而不舍入的最佳方法。例如:

declare @value decimal(18,2)

set @value = 123.456

这将自动将@value舍入为123.46,这在大多数情况下都很好。然而,对于这个项目,我不需要那样。有没有一种简单的方法来截断我不需要的小数?我知道我可以使用left()函数并将其转换回小数。还有别的办法吗?


当前回答

SELECT CAST(Value as Decimal(10,2)) FROM TABLE_NAME;

小数点后会有两个值。(mssql server)

其他回答

Round有一个可选参数

Select round(123.456, 2, 1)  will = 123.45
Select round(123.456, 2, 0)  will = 123.46

实际上,不管第三个参数是0或1或2,它不会四舍五入你的值。

CAST(ROUND(10.0055,2,0) AS NUMERIC(10,2))

请尝试使用此代码将一个点后的3个十进制值转换为2位小数:

declare @val decimal (8, 2)
select @val = 123.456
select @val =  @val

select @val

输出值为123.46

以下是我能够截断而不是舍入的方法:

select 100.0019-(100.0019%.001)

返回100.0010

你的例子是:

select 123.456-(123.456%.001)

返回123.450

现在,如果你想去掉0结尾,只需对它进行强制转换:

select cast((123.456-(123.456%.001)) as decimal (18,2))

返回123.45

select convert(int,@value)