Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何减少浮动长度_Sql_Sql Server - Fatal编程技术网

Sql 如何减少浮动长度

Sql 如何减少浮动长度,sql,sql-server,Sql,Sql Server,使用SQLServer2000 我想减少十进制长度 质疑 输出显示为1.999999999 我不想对值进行四舍五入,我想这样显示1.99 试问 Select LEFT(23/12, LEN(23/12) - 3) as total 上面的查询仅在有十进制值(如12.4444)时有效,但如果总数是个位数(如12、4或11…),则在运行时出错 如何做到这一点 需要查询帮助不是非常优雅,但适用于所有情况: 选择CONVERT(float,LEFT(CONVERT(nvarchar,23.0/12.0

使用SQLServer2000

我想减少十进制长度

质疑

输出显示为
1.999999999

我不想对值进行四舍五入,我想这样显示
1.99

试问

Select LEFT(23/12, LEN(23/12) - 3) as total
上面的查询仅在有十进制值(如12.4444)时有效,但如果总数是个位数(如12、4或11…),则在运行时出错

如何做到这一点


需要查询帮助

不是非常优雅,但适用于所有情况:

选择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
--说明:截断而不是舍入浮点
--选择dbo.TruncateNumber(23.0/12.0,2)
-- =============================================
创建函数截断枚举器
(
--在此处添加函数的参数
@漂浮物,
@小整数
)
返回浮动
作为
开始
如果(@numDecimals<0)
开始
设置@numDecimals=0
结束
--在这里声明返回变量
返回CONVERT(float,LEFT(CONVERT(nvarchar,@inFloat),CHARINDEX('.',CONVERT(nvarchar,@inFloat))+@numDecimals))
结束
去

有一个非常简单的解决方案。你可以在BOL找到它。Round接受可选的第三个参数,即Round类型。这些值是舍入值或截断值

圆形数值_表达式,长度[,函数])

函数是要执行的操作类型。功能必须是 tinyint、smallint或int。当函数被省略或值为 0(默认值),数值_表达式为四舍五入。当值不是0时 如果指定,则截断数值_表达式

那就这么做吧

Select ROUND(cast(23 as float)/12, 2, 1) as total

这是1.91。请注意,如果你真的看到1.999-你的电脑确实有问题。23/12=1.91666(无限)。您需要将其中一个数字强制转换为浮点,因为sql假定它们是整数,否则将执行整数除法。当然,您可以将它们都转换为float,但只要一个是float,另一个也将被转换

为什么在数字上使用字符串函数?重复你是如何得到23/12来显示1.9999。。。首先它应该显示1.916667。这可能表明存在一些奇怪的情况,其分辨率可能会使格式更直接(因为您可以舍入而不是截断)。可能重复的
选择23/12作为总数
给出的答案为1<代码>选择23.0/12作为总数
给出1.916666;如果你真的得到了1.9999999999,那么还有更严重的事情正在进行中。Truncate是一个内置的圆形选项,不需要在这里重新发明轮子。
Select ROUND(cast(23 as float)/12, 2, 1) as total