select 20.0/3结果是:
6.666666不想用round,能不能有一个设置修改这个默认的小数位??因为有很多个计算,一个个改很麻烦。
6.666666不想用round,能不能有一个设置修改这个默认的小数位??因为有很多个计算,一个个改很麻烦。
解决方案 »
- CAST('1.1' as float)*CAST('400' as float)为什么不等于cast('440' as float)
- 怎么两个关联表同时新增数据
- 数据库设计的问题
- 100分请教一个sql语句-有点难
- 创建存储过程时出现的错误
- sql 2005将两个查询结果相加 疑难
- 请教一条SQL语句
- 高分求人优化语句 并告诉这个语句会不会死锁。。 在线等
- 急!如何在存储过程中定义text变量,实现立刻给分。
- 问一个简单的问题,select * from table where date = '2001-1-1',但是数据库里的日期是包括小时,分秒,我这么样去掉这些?只查询出该
- 如何优化这样的查询,在线等!
- 怎么将一个表的一列数据插入到另一表中!!!
select cast(20.0/3 as decimal(18,2))/*6.67*/
select 20.0/3 如果有1000行,我不想改1000次,如果有哪个地方可以修改默认的小数点长度就好。
decimal型表达式 e1(精度为 p1,小数位数为 s1)和表达式 e2(精度为 p2,小数位数为 s2),
它们运算结果的位数有如下算法:
运算 结果精度 结果小数位数
----------------------------------------------------------------
e1 + e2 max(s1, s2) + max(p1-s1, p2-s2) + 1 max(s1, s2)
e1 - e2 max(s1, s2) + max(p1-s1, p2-s2) + 1 max(s1, s2)
e1 * e2 p1 + p2 + 1 s1 + s2
e1 / e2 p1 - s1 + s2 + max(6, s1 + p2 + 1) max(6, s1 + p2 + 1)
e1 { UNION | EXCEPT | INTERSECT } e2 max(s1, s2) + max(p1-s1, p2-s2) max(s1, s2)在本例中,当e1/e2时,结果小数位数取 max(6,s1+p2+1),但s1+p2+1>38,所以为了不截断整数部分,系统取了6.
这就是为什么你把总精度设得那么高,小数部分反而总是6的原因。