sql server控制小数显示位数的解决办法。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server控制小数显示位数的解决办法。相关的知识,希望对你有一定的参考价值。
如题,我有一列是float类型,由于float类型存储精度问题,在数据库里存储成如0.94999999999999996小数位非常多的数字。我想让他显示成0.95该怎么弄?
我试过select Convert(NUMERIC(18,2),0.95000000000000000)的写法,但输出成了.95,个位的0丢了。该怎么写能实现我要的效果呢?求解。
解决办法和操作步骤如下:
1、首先,打开SQL Server数据库,然后准备一个小数,见下图。
2、其次,完成上述步骤后,可以使用round函数进行十进制处理,但是round会将十进制变为0,而不是保留位数的实际数,见下图。
3、接着,可以使用cast函数执行小数转换,直接转换为numeric类型,见下图。
4、但是,在使用cast时,请务必注意,转换类型不要发生数字溢出,见下图。
5、然后,编写转换时,应尽可能把转化的类型位数写得大一点,见下图。
6、最后,也可以使用Convert函数进行转换,这与cast用法类似,见下图。
参考技术A1、首先我们打开SQL Server数据库,然后准备一个小数,如下图所示
2、然后我们可以通过round函数来进行小数处理,但是round会把小数后面变成0而不是真正意义上的保留位数。
3、所有接下来我们就可以通过cast函数进行小数转化,如下图所示,直接转化为numeric类型。
4、但是在用cast的时候需要注意的是转化的类型中不要发生位数溢出,如下图所示。
5、我们在进行转化的时候尽可能的把转化的类型位数写的大一点,如下图所示。
6、然后还可以通过Convert函数进行转化,如下图所示,和cast用法差不多。
参考技术B控制小数显示位数的办法如下:
decimal(18,0)
18是定点精度,0是小数位数。
decimal(a,b)
a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。
b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0。
实例:
decimal[ (p[ ,s] )] 和 numeric[ (p[ ,s] )]
固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 ISO 同义词为 dec 和 dec(p, s),numeric 在功能上等价于 decimal。
p(精度)
最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。
该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。
s (小数位数)
小数点右边可以存储的十进制数字的最大位数,小数位数必须是从 0 到 p 之间的值。
仅在指定精度后才可以指定小数位数,默认的小数位数为 0;
因此,0 <= s <= p。最大存储大小基于精度而变化。
我运行了蛮好的,个位0应该不会丢啊!
参考技术D 不显示前导0不是数据本身的问题,需要在显示的程序中使用诸如FormatNumber的函数进行格式化处理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位
以上是关于sql server控制小数显示位数的解决办法。的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 2000/2005/2008 中使用 FLOAT 转换小数位数