Rya*_*ook 184 sql t-sql sql-server rounding
我正在尝试确定在SQL中截断或删除额外小数位的最佳方法,而不进行舍入.例如:
declare @value decimal(18,2)
set @value = 123.456
Run Code Online (Sandbox Code Playgroud)
这将自动围绕@Value为123.46 ....这在大多数情况下是好的.但是,对于这个项目,我不需要那样做.是否有一种简单的方法来截断我不需要的小数?我知道我可以使用left()函数并转换回小数......还有其他方法吗?
Jef*_*tis 259
ROUND ( 123.456 , 2 , 1 )
Run Code Online (Sandbox Code Playgroud)
当第三个参数!= 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指定.
Jim*_*mmy 180
select round(123.456, 2, 1)
Run Code Online (Sandbox Code Playgroud)
小智 13
这是我能够截断而不是舍入的方式:
select 100.0019-(100.0019%.001)
Run Code Online (Sandbox Code Playgroud)
返回100.0010
你的例子:
select 123.456-(123.456%.001)
Run Code Online (Sandbox Code Playgroud)
返回123.450
现在,如果你想摆脱结束零,只需投下它:
select cast((123.456-(123.456%.001)) as decimal (18,2))
Run Code Online (Sandbox Code Playgroud)
返回123.45
小智 9
实际上无论第三个参数是0还是1或2,它都不会对你的值进行舍入.
CAST(ROUND(10.0055,2,0) AS NUMERIC(10,2))
Run Code Online (Sandbox Code Playgroud)
小智 8
Round有一个可选参数
Select round(123.456, 2, 1) will = 123.45
Select round(123.456, 2, 0) will = 123.46
Run Code Online (Sandbox Code Playgroud)
小智 7
ROUND(number, decimals, operation)
Run Code Online (Sandbox Code Playgroud)
数字 => 必填。要四舍五入的小数位数
=> 必填。将数字舍入到运算的小数位数
=> 可选。如果为 0,则将结果四舍五入到小数位数。如果另一个值不为 0,则会将结果截断为小数位数。默认值为 0
ROUND(number, decimals, operation)
Run Code Online (Sandbox Code Playgroud)
会给你235.410
SELECT ROUND(235.415, 2, 1)
Run Code Online (Sandbox Code Playgroud)
会给你235.000
但现在修剪0你可以使用cast
SELECT ROUND(235.415, 0, 1)
Run Code Online (Sandbox Code Playgroud)
会给你235
你想要小数吗?
如果没有,请使用
select ceiling(@value),floor(@value)
Run Code Online (Sandbox Code Playgroud)
如果你用0做,那么做一轮:
select round(@value,2)
Run Code Online (Sandbox Code Playgroud)
另一个截断没有舍入解决方案和示例.
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
612919 次 |
| 最近记录: |