字段里虽然是两位的,但实际浮点的格式不是两位,
从事四川电信科技城机房,服务器租用,云主机,网页空间,国际域名空间,CDN,网络代维等服务。
float类型中小数位数为7位,即可精确到小数点后7位,表示范围为1.5e - 45~ 3.4e + 38。对于一个小数其默认类型为double型,如果需要指定为float型,需要在小数后面添加F或f后缀。
要固定小数位要用decimal或numeric
例,decimal(2,1),有效长度为2,小数位占1位。
或者在原有有数据基础上进行四舍五入
Sql截取浮点小数位数,不四舍五入
round(551.239567,2,0)
结果:551.24
round(551.239567,2,1)结果:551.23
第一个2表示截取2位第二个0,1分别表示0是四舍五入,0以外是截取
round返回数字表达式并四舍五入为指定的长度或精度。
显示的界面上要求只保留到小数点后4位,发现round(表达式,4,1)可以截断小数点4位后的数字
如果写(round,4)表示对小数点后4位四舍五入,但不截断多的0
写个函数就行了 很简单 主题代码如下 可在sqlserver 直接运行
declare @aaa varchar(50)='3213.434'
if (substring(@aaa ,charindex('.',@aaa)+1,LEN(@aaa)-charindex('.',@aaa)-1) 3)
begin
print cast( cast(@aaa as numeric(18,3)) as varchar(50))
end
else
print @aaa
直接运行看打印的结果, 这里是直接截取 如果要四舍五入 用round 函数。 改成函数应该不用我说了吧 加个壳 把 print 改成 return 返回出去
Round函数(四舍六入五成双)(转)2007-06-09 15:20Round(所在单元:Math)
功能说明:对一个实数进行四舍五入。(按照银行家算法)
参考实例:
var
I, j: Integer;
begin
i := Round(1.5); // i等于2
j := Round(2.5); // j等于2
//注意Round(2.53)=3
end;
在Delphi中使用Round函数得到的答案有时与我们所预期的会不太一样:
采用的是四舍六入五留双。即当舍或入位大于或小于五时按四舍五入来处理,而当舍或入位等于五时,就要看前面一位是什么,根据奇进偶不进,它总是返回一个偶数值。
示例 结果
i:= Round(11.5) 12
i:= Round(10.5) 10
这种Round其实是按照银行家算法,统计学上一般都用这种算法,比传统的"四舍五入"要科学。
如果要使用传统的"四舍五入"方法,可以使用下面算法:
//提供者FlashDance(10040231) 15:15:58
var
D1,D2:Double;
begin
D1:=3.14159;
D2:=StrToFloat(Format('%.5f',[D1]));
end;
cast(expression
as
transform_type)
表示把
expression
字段转换成transform_type类型的数据输出
返回transform_type
类型数据;
备注:cast不且有四舍五入的数据截取功能,故cast('12.5'
as
int)系统会报错,
可为cast('12.5'
as
decimal(9,2))
实例:
假定产品经理已经创建了一个系统,用于唯一地标识生产出来的每辆自行车,以便跟踪其
型号、类型和类别。他决定合并产品号、产品生产线标识符、产品型号标识符和一个顺序号,
为生产出来的每辆自行车创建一个唯一的序列号。在这个过程的第一步,他要求提供包括除顺序号
之外的所有属性的所有可能产品的根标识符。
实现:
1.SELECT
ProductNumber
2.
+
'-'
3.
+
ProductLine
4.
+
'-'
5.
+
CAST(ProductModelID
AS
char(4))
AS
BikeSerialNum
6.FROM
Production.Product
7.WHERE
ProductSubCategoryID
4