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用法类似,见下图。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-20

1、首先我们打开SQL  Server数据库,然后准备一个小数,如下图所示

2、然后我们可以通过round函数来进行小数处理,但是round会把小数后面变成0而不是真正意义上的保留位数。

3、所有接下来我们就可以通过cast函数进行小数转化,如下图所示,直接转化为numeric类型。

4、但是在用cast的时候需要注意的是转化的类型中不要发生位数溢出,如下图所示。

5、我们在进行转化的时候尽可能的把转化的类型位数写的大一点,如下图所示。

6、然后还可以通过Convert函数进行转化,如下图所示,和cast用法差不多。

本回答被网友采纳
第2个回答  推荐于2017-09-18

控制小数显示位数的办法如下:

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。最大存储大小基于精度而变化。

 

第3个回答  2013-01-28

我运行了蛮好的,个位0应该不会丢啊!

第4个回答  2015-03-10
不显示前导0不是数据本身的问题,需要在显示的程序中使用诸如FormatNumber的函数进行格式化处理
相似回答