SQL中的小数点后的输入位数.
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中的小数点后的输入位数.相关的知识,希望对你有一定的参考价值。
是那一个函数可以控制小数点后面的位数的?
1、用函数 ROUND(数值,s) ,其中 s 表示 小数位数。
例:SELECT ROUND(4.994,2) 返回 4.990。
2、用函数 CAST(数值 as numeric(n,s)),其中n表示有效数字位数,s表示小数位数。
例:SELECT CAST(4.994 as numeric(10,2)) 返回 4.99。
3、用函数 CONVERT(numeric(n,s),数值),其中n表示有效数字位数,s表示小数位数。
例: SELECT CONVERT(numeric(10,2),4.985) 返回 4.99。
其运用的函数是函数 TRUNC。而trunc函数的功能和函数INT类似,是截取日期或数字,返回指定的值。函数trunc直接去除数字的小数部分,而函数INT则是向下舍入到最接近的整数。
扩展资料
TRUNC(for number)语法格式:TRUNC(number,[decimals])
其中:
number 待做截取处理的数值。
decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分。
trunc函数 turnc(x,y)如果y是负数,则对x在小数点左边的第|y|位处进行截断。
例如:TRUNC(5.75, -1)=0;
看成 0005.75.000 从小数点左边第一位往左边截,是0。
下面是该函数的使用情况:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80
注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。与取整类似,比如参数为1即取整到十分位,如果是-1,则是取整到十位,以此类推。
参考资料来源:百度百科 trunc
参考技术A运用的函数是函数 TRUNC。
trunc是一种函数,功能和函数INT类似,是截取日期或数字,返回指定的值。函数trunc直接去除数字的小数部分,而函数INT则是向下舍入到最接近的整数。用法如下:trunc
TRUNC(number,num_digits)
Number 需要截尾取整的数字。
Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。
扩展资料
TRUNC(for dates)
TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date,[fmt])
其中:date是一个日期值,fmt是日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去。
下面是该函数的使用情况:
TRUNC(TO_DATE('24-Nov-1999 08:00 pm','dd-mon-yyyy hh:mi am'))
='24-Nov-1999 12:00:00 am'
TRUNC(TO_DATE('24-Nov-1999 08:37 pm','dd-mon-yyyy hh:mi am'),'hh') ='24-Nov-1999 08:00:00 am'
trunc(sysdate,'yyyy') --返回当年第一天.
trunc(sysdate,'mm') --返回当月第一天.
trunc(sysdate,'d') --返回当前星期的第一天.
trunc(sysdate,'dd')--返回当前年月日
trunc(sysdate, 'hh')--返回当前小时
trunc(sysdate, 'mi')--返回当前分钟
参考资料:百度百科——trunc
参考技术B 一、用函数 ROUND(数值,s) , 其中 s 表示 小数位数例:SELECT ROUND(4.994,2) 返回 4.990
二、用函数 CAST(数值 as numeric(n,s)),其中n表示有效数字位数,s表示小数位数
例:SELECT CAST(4.994 as numeric(10,2)) 返回 4.99
三、用函数 CONVERT(numeric(n,s),数值),其中n表示有效数字位数,s表示小数位数
例: SELECT CONVERT(numeric(10,2),4.985) 返回 4.99本回答被提问者采纳 参考技术C 6位
如何获取ms sql中float列中小数点后的位数?
我必须计算MS Sql Server(2005或2008无关紧要)托管的数据库中小数点后的数字,以便纠正用户所犯的一些错误。我在Oracle数据库上遇到了同样的问题,但事情并不复杂。底线是Oracle上的选择是:
select length( substr(to_char(MY_FIELD), instr(to_char(MY_FILED),'.',1,1)+1, length(to_char(MY_FILED)))) as digits_length
from MY_TABLE
提交的My_filed是浮点数(38)。
在Ms Sql服务器上我尝试使用:
select LEN(SUBSTRING(CAST(MY_FIELD AS VARCHAR), CHARINDEX('.',CAST(MY_FILED AS VARCHAR),1)+1, LEN(CAST(MY_FIELD AS VARCHAR)))) as digits_length
from MY_TABLE
问题是在MS Sql Server上,当我将MY_FIELD转换为varchar时,浮点数仅被截断2位小数并且数字的计数错误。有人可以给我任何提示吗?
最好的祝福。
SELECT
LEN(CAST(REVERSE(SUBSTRING(STR(MY_FIELD, 13, 11), CHARINDEX('.', STR(MY_FIELD, 13, 11)) + 1, 20)) AS decimal))
from TABLE
我从朋友那里得到了一个非常简单的解决方案。所以我会发布解决方法,以帮助其他人和我一样。
一,制作功能:
create FUNCTION dbo.countDigits(@A float) RETURNS tinyint AS
BEGIN
declare @R tinyint
IF @A IS NULL
RETURN NULL
set @R = 0
while @A - str(@A, 18 + @R, @r) <> 0
begin
SET @R = @R + 1
end
RETURN @R
END
GO
第二:
select MY_FIELD,
dbo.countDigits(MY_FIELD)
from MY_TABLE
使用该函数将获得小数点后的确切位数。
首先是切换到使用CONVERT
而不是CAST
。不同的是,使用CONVERT
,您可以指定格式代码。 CAST
使用默认格式代码:
当expression是float或real时,style可以是下表中显示的值之一。其他值处理为0。
没有一种格式特别吸引人,但我认为你最好使用的是2
。所以它会是:
CONVERT(varchar(25),MY_FIELD,2)
不幸的是,这将为您提供科学记数法的价值,并始终使用16位数字,例如1.234567890123456e+000
。要获得“真实”数字的数量,您需要将此数字拆分,计算小数部分中的位数,并将其与指数中提供的数字相抵消。
当然,在处理具有已定义二进制表示的数字时,插入关于尝试讨论数字的常见警告/警告。特定float
的“数字”数量可能会有所不同,具体取决于计算方式。
我不确定速度。等或此代码的优雅。这是为了一些临时测试找到第一个十进制值。但是这段代码可以改为循环遍历所有小数,并且可以轻松找到最后一次大于零的值。
DECLARE @NoOfDecimals int = 0
Declare @ROUNDINGPRECISION numeric(32,16) = -.00001000
select @ROUNDINGPRECISION = ABS(@ROUNDINGPRECISION)
select @ROUNDINGPRECISION = @ROUNDINGPRECISION - floor(@ROUNDINGPRECISION)
while @ROUNDINGPRECISION < 1
Begin
select @NoOfDecimals = @NoOfDecimals +1
select @ROUNDINGPRECISION = @ROUNDINGPRECISION * 10
end;
select @NoOfDecimals
以上是关于SQL中的小数点后的输入位数.的主要内容,如果未能解决你的问题,请参考以下文章