Truncate(不圆)小数位SQL服务器
-
09-06-2019 - |
题
我试图确定最好的方式来截断或放额外的小数位SQL没有四舍五入。例如:
declare @value decimal(18,2)
set @value = 123.456
这将自动轮 @value
要 123.46
, ,这是良好的,在大多数情况下。然而,对于这个项目,我不需要。是有一个简单的方法来截断小数我不需要什么?我知道我可以使用 left()
功能和转换回到一位小数。是否有任何其他的方式?
解决方案
select round(123.456, 2, 1)
其他提示
ROUND ( 123.456 , 2 , 1 )
在第三个参数 != 0 它截断,而不是轮
http://msdn.microsoft.com/en-us/library/ms175003(SQL。90).aspx
语法
圆(numeric_expression,长度[、功能])
参数
numeric_expression 是一个表达的精确数字或近似数字数据 类型的类别,除了位的数据类型。
长 是的精度,这numeric_expression是圆。长度必须是一个表达的类型指定列的值、smallint,或int。当长是正数,numeric_expression是四舍五入到小数位指定的长度。当时的长度是一个负数,则将numeric_expression在左边的小数点,作为指定的长度。
- 功能 是一种类型的操作,以执行。功能,必须指定列的值、smallint,或int。当功能是省略或具有价值的0(默认),则将numeric_expression.当值0规定,numeric_expression被截断。
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))
圆形的有个可选择的参数
Select round(123.456, 2, 1) will = 123.45
Select round(123.456, 2, 0) will = 123.46
另一个截断与有四舍五入的方案和范例。
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 ceiling(@value),floor(@value)
如果你这样做是有0然后做一个圆形:
select round(@value,2)
这将消除小数部分的任何数量
SELECT ROUND(@val,0,1)
我知道这很晚了但我没看见它作为一个答案,并且已经用这一招对年。
简单地减为.005从你的价值和使用轮(@num,2).
你的例子:
declare @num decimal(9,5) = 123.456
select round(@num-.005,2)
返回123.45
它会自动调整四舍五入到正确的价值。
顺便说一下,是你重新程序的影办公室空间?
请尝试使用这个代码转换3小数值后一点到2小数位数:
declare @val decimal (8, 2)
select @val = 123.456
select @val = @val
select @val
输出是123.46
我觉得你只想要小数值, 在这种情况下可以使用如下:
declare @val decimal (8, 3)
SET @val = 123.456
SELECT @val - ROUND(@val,0,1)
另一种方式是 ODBC TRUNCATE
功能:
DECLARE @value DECIMAL(18,3) =123.456;
SELECT @value AS val, {fn TRUNCATE(@value, 2)} AS result
输出:
╔═════════╦═════════╗
║ val ║ result ║
╠═════════╬═════════╣
║ 123,456 ║ 123,450 ║
╚═════════╩═════════╝
注:
我建议使用内 ROUND
功能,与第3参数设置1。
我知道这个问题真的很老但没有人使用的子串回合。此作为优势的能力来圆真的很长的数字(限制你串在SQL服务器,这通常是8000人物):
SUBSTRING('123.456', 1, CHARINDEX('.', '123.456') + 2)
select convert(int,@value)
Mod(x,1)
是最简单的方式,我想。