使用SQL Server 2000
我想减少小数长度
查询
Select 23/12 as total
输出显示为1.99999999999
我不想对值进行舍入,我想像这样1.99
尝试查询
Select LEFT(23/12, LEN(23/12) - 3) as total
上述查询仅在存在十进制值(如12.444444)时有效,但如果总数为单位数意味着像12或4或11 ....,我在运行时收到错误。
如何做到这一点。
需要查询帮助
答案 0 :(得分:2)
有一个非常简单的解决方案。你可以在BOL找到它。 Round采用可选的第3个参数,即圆形类型。值是圆形或截断的。
ROUND numeric_expression,length [,function])
...
function是要执行的操作类型。功能必须 tinyint,smallint或int。省略函数或者值为。时 0(默认值),numeric_expression是四舍五入的。当值不是0时 指定后,numeric_expression被截断。
所以就这样做
Select ROUND(cast(23 as float)/12, 2, 1) as total
得到1.91。请注意,如果您真的看到1.999 - 您的计算机出了问题。 23/12 = 1.916666666(ad infinitum)。你需要将其中一个数字转换为float,因为sql假定它们是整数,否则进行整数除法。你当然可以将它们都作为浮点数投射,但只要一个浮动,另一个也将被转换。
答案 1 :(得分:1)
不是非常优雅,但适用于所有情况:
选择CONVERT(float,LEFT(CONVERT(nvarchar,23.0 / 12.0),CHARINDEX('。',CONVERT(nvarchar,23.0 / 12.0))+ 2))总计
标量函数
-- Description: Truncate instead of rounding a float
-- SELECT dbo.TruncateNumber(23.0/12.0,2)
-- =============================================
CREATE FUNCTION TruncateNumber
(
-- Add the parameters for the function here
@inFloat float,
@numDecimals smallint
)
RETURNS float
AS
BEGIN
IF (@numDecimals < 0)
BEGIN
SET @numDecimals = 0
END
-- Declare the return variable here
RETURN CONVERT(float,LEFT(CONVERT(nvarchar, @inFloat),CHARINDEX('.',CONVERT(nvarchar, @inFloat)) + @numDecimals))
END
GO