我正在尝试确定在SQL中截断或删除额外小数位的最佳方法,而不进行舍入.例如:
declare @value decimal(18,2) set @value = 123.456
这将自动围绕@Value为123.46 ....这在大多数情况下是好的.但是,对于这个项目,我不需要那样做.是否有一种简单的方法来截断我不需要的小数?我知道我可以使用left()函数并转换回小数......还有其他方法吗?
ROUND ( 123.456 , 2 , 1 )
当第三个参数!= 0时,它会截断而不是舍入
http://msdn.microsoft.com/en-us/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指定.
function 是要执行的操作类型.function必须是tinyint,smallint或int.省略function或者值为0(默认值)时,numeric_expression将四舍五入.如果指定了0以外的值,则会截断numeric_expression.
select round(123.456, 2, 1)
SELECT Cast(Round(123.456,2,1) as decimal(18,2))
这是我能够截断而不是舍入的方式:
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
实际上无论第三个参数是0还是1或2,它都不会对你的值进行舍入.
CAST(ROUND(10.0055,2,0) AS NUMERIC(10,2))
Round有一个可选参数
Select round(123.456, 2, 1) will = 123.45 Select round(123.456, 2, 0) will = 123.46
你想要小数吗?
如果没有,请使用
select ceiling(@value),floor(@value)
如果你用0做,那么做一轮:
select round(@value,2)
另一个截断没有舍入解决方案和示例.
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