SQL用sum结果有误
我用SQL的SUM函数:selectsum(n7)fromsougousinglexh得到的结果是:54613.7199999999,但是我的n7字段里最多只到小数点后两...
我用SQL的SUM函数:select sum(n7) from sougousinglexh 得到的结果是:54613.7199999999,但是我的n7字段里最多只到小数点后两位,怎么会变成十位,字段n7类型为float类型
展开
5个回答
展开全部
字段里虽然是两位的,但实际浮点的格式不是两位,
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以外是截取
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以外是截取
追问
也就是说如果是float类型的就无法避免哦,必须进行四舍五入哦,那我有几个字段,为什么只有n7这个字段会出现这种情况,其他字段还是有小数点后两位,但是sum累加后是正确的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
float是近似值类型,数据不精确,最好用decimal或者numeric类型
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你sum后他会自动把你的数据类型往上一级扩充的,你如果还想要你的原定类型就在前面加一个convert。
追问
就算再转换类型那还是有十位小数啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sqlserver无法使用to_number函数
cast(SUM(n7) as decimal(18,2))
用这样就好了
cast(SUM(n7) as decimal(18,2))
用这样就好了
追问
亲,你这个是保留有效数字啊,但是我的n7字段里的数据都是小数点后两位的,没有10位的,怎么用sum累加后会变成10位的了
追答
哎,这个没办法啊
SqlServer的帮助中是这样描述float类型的:用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。
所以今后这个类型一定要慎用
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
to_number后再sum
追问
float也算数字类型啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询