mysql sum float 小数float型 小数末位“5”的舍入规则是怎样的

解决MySQL中float字段SUM()时出现一堆小数的问题
方法一:最好的办法是将float字段改为decimal(16,6)。具体方法:可设置一个临时字段,结合MySQL的关键字binary进行准确复制等。
方法二:使用binary关键字解决。具体操作为&select sum(binary 字段名(float类型))&
摘自 hellostory的专栏
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'mysql float怎样保存小数啊
[问题点数:40分,结帖人light86]
mysql float怎样保存小数啊
[问题点数:40分,结帖人light86]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年2月 PHP大版内专家分月排行榜第一2012年1月 PHP大版内专家分月排行榜第一2011年11月 PHP大版内专家分月排行榜第一2011年9月 PHP大版内专家分月排行榜第一
2012年3月 PHP大版内专家分月排行榜第二2011年12月 PHP大版内专家分月排行榜第二2011年10月 PHP大版内专家分月排行榜第二
2014年10月 PHP大版内专家分月排行榜第三2014年8月 PHP大版内专家分月排行榜第三2014年3月 PHP大版内专家分月排行榜第三2014年1月 PHP大版内专家分月排行榜第三2012年8月 PHP大版内专家分月排行榜第三2012年2月 PHP大版内专家分月排行榜第三2012年1月 PHP大版内专家分月排行榜第三2011年12月 PHP大版内专家分月排行榜第三2011年11月 PHP大版内专家分月排行榜第三2011年6月 PHP大版内专家分月排行榜第三
2013年5月 总版技术专家分月排行榜第一
2016年7月 总版技术专家分月排行榜第二2016年3月 总版技术专家分月排行榜第二2015年12月 总版技术专家分月排行榜第二2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
2010年3月 PHP大版内专家分月排行榜第三2005年4月 PHP大版内专家分月排行榜第三
2012年2月 PHP大版内专家分月排行榜第一2012年1月 PHP大版内专家分月排行榜第一2011年11月 PHP大版内专家分月排行榜第一2011年9月 PHP大版内专家分月排行榜第一
2012年3月 PHP大版内专家分月排行榜第二2011年12月 PHP大版内专家分月排行榜第二2011年10月 PHP大版内专家分月排行榜第二
2010年3月 PHP大版内专家分月排行榜第三2005年4月 PHP大版内专家分月排行榜第三
2010年3月 PHP大版内专家分月排行榜第三2005年4月 PHP大版内专家分月排行榜第三
2014年11月 PHP大版内专家分月排行榜第三2014年6月 PHP大版内专家分月排行榜第三2014年4月 PHP大版内专家分月排行榜第三2014年2月 PHP大版内专家分月排行榜第三2013年11月 PHP大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。变量value已被定义为float型,对其小数部分进行四舍五入的C表达式是_________
(int)(x=value);建议把两个括号都加上,像把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了,避免被忽略.
为您推荐:
其他类似问题
扫描下载二维码--PHP程序首选
--香港机房 美国机房 免备案
--Tomacat5/6/7 自主重启
--BGP六线访问无忧
--国内/海外 全支持
主要功能是针对微信商家公众号提供与众不同的、有针对性的营销推广服务。通过微信平台,用户可以轻松管理自己的微信各类信息,对微信公众账号进行维护、开展智能机器人、在线发优惠弧⒊榻薄⒐谓薄⑴煞⒒嵩笨ā⒋蛟煳⒐偻⒖粑⑼殴旱榷嘀只疃晕⑿庞迪钟行Ъ嗫兀罄┱骨痹诳突汉褪迪制笠档脑擞勘辍N奘褂檬奔浜凸δ芟拗
您现在的位置:&&
mysql float精度与范围总结
大 中 小 
文章来源:
更新时间: 19:00:43
FLOAT类型用于表示近似数值数据类型。SQL标准 允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范围)。MySQL还支持可选的只用于确定存储大小的精度规定。0到23的精度对应 FLOAT列的4字节单精度。24到53的精度对应DOUBLE列的8字节双精度。
单精度浮点数用4字节(32bit)表示浮点数
采用IEEE754标准的计算机浮点数,在内部是用二进制表示的
如:7.22用32位二进制是表示不下的。
所以就不精确了。
mysql中float数据类型的问题总结&
对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。
FLOAT类型用于表示近似数值数据类型。SQL标准允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范围)。MySQL还支持 可选的只用于确定存储大小的精度规定。0到23的精度对应FLOAT列的4字节单精度。24到53的精度对应DOUBLE列的8字节双精度。
MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以 显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。
MySQL将DOUBLE视为DOUBLE PRECISION(非标准扩展)的同义词。MySQL还将REAL视为DOUBLE PRECISION(非标准扩展)的同义词,除非SQL服务器模式包括REAL_AS_FLOAT选项。
为了保证最大可能的可移植性,需要使用近似数值数据值存储的代码应使用FLOAT或DOUBLE PRECISION,不规定精度或位数。
DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度;例如:
salary DECIMAL(5,2)
在该例子中,5是精度,2是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。
在MySQL 5.1中以二进制格式保存DECIMAL和NUMERIC值。
标准SQL要求salary列能够用5位整数位和两位小数保存任何值。因此,在这种情况下可以保存在salary列的值的范围是从-999.99到999.99。
在标准SQL中,语法DECIMAL(M)等价于DECIMAL(M,0)。同样,语法DECIMAL等价于DECIMAL(M,0),可以通过计算确定M的值。在MySQL 5.1中支持DECIMAL和NUMERIC数据类型的变量形式。M默认值是10。
DECIMAL或NUMERIC的最大位数是65,但具体的DECIMAL或NUMERIC列的实际范围受具体列的精度或标度约束。如果此类列分配 的值小数点后面的位数超过指定的标度允许的范围,值被转换为该标度。(具体操作与操作系统有关,但一般结果均被截取到允许的位数)。
二、mysql 和 oracle中的数值类型
问题是不是只有 mysql 存在呢?显然不是,只要是符合IEEE754标准的浮点数实现,都存在相同的问题。
mysql中的数值类型(不包括整型):
IEEE754浮点数:float(单精度),double或real(双精度)&&
定点数:decimal或numeric
oracle中的数值类型:
oracle 浮点数 :number(注意不指定精度)&&
IEEE754浮点数:BINARY_FLOAT(单精度),BINARY_DOUBLE(双精度)FLOAT,FLOAT(n) (ansi要求的数据类型)
定点数:number(p,s)
如果在oracle中,用BINARY_FLOAT等来做测试,结果是一样的。因此,在数据库中,对于涉及货币或其他精度敏感的数据,应使用定点数来存 储,对mysql来说是 decimal,对oracle来说就是number(p,s)。双精度浮点数,对于比较大的数据同样存在问题!
三、编程中也存在浮点数问题
不光数据库中存在浮点数问题,编程中也同样存在,甚至可以说更值得引起注意!
通过上面的介绍,浮点数的误差问题应该比较清楚了。如果在程序中做复杂的浮点数运算,误差还会进一步放大。因此,在程序设计中,如果用到浮点数,一定要意 识到可能产生的误差问题。不仅如此,浮点数如果处理不好,还会导致程序BUG!看下面的语句:if (x != y) { z = 1 / (x -y);}这个语句看起来没有问题,但如果是浮点数,就可能存在问题!再看下面的语句会输出什么结果: public class Test { public static void main(String[]args) throws Exception { System.out.print("7.22-7.0=" + (7.22f-7.0f)); } }&&&& 我们可能会想当然地认为输出结果应该是 0.22 ,实际结果却是 0. !
&因此,在编程中应尽量避免做浮点数的比较,否则可能会导致一些潜在的问题!除了这些,还应注意浮点数中的一些特殊值,如 NaN、+0、-0、+无穷、-无穷等,IEEE754虽然对此做了一些约定,但各具体实现、不同的硬件结构,也会有一些差异,如果不注意也会造成错误! 四、总结:
从上面的分析,我们可以得出以下结论:
1、浮点数存在误差问题;
2、对货币等对精度敏感的数据,应该用定点数表示或存储;
3、编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;
4、要注意浮点数中一些特殊值的处理。
为了能够引起大家的重视,在介绍浮点数与定点数以前先让大家看一个例子:
mysql& CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));
Query OK, 0 rows affected (0.29 sec)
mysql& insert into test values(,);
Query OK, 1 row affected (0.07 sec)
mysql& select *
+-----------+-----------+
+-----------+-----------+
+-----------+-----------+
1 row in set (0.00 sec)
从上面的例子中我们看到c1列的值由变成了,这就是浮点数的不精确性造成的。
在mysql中float、double(或real)是浮点数,decimal(或numberic)是定点数。
浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围;
它的缺点是会引起精度问题。
&Float类型和double类型的区别
FLOAT[(M,D)]&& [ZEROFILL]&&
一个小(单精密)浮点数字。不能无符号。允许的值是-3.E+38到-1.E-38,0&& 和1.E-38到3.E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有 &24&& 的一个参数表示一个单精密浮点数字。&&
DOUBLE[(M,D)]&& [ZEROFILL]&&
一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.到 -2.、&& 0和2.到1.。M是显示宽度而D是小数位数。没有一个参数的 DOUBLE或FLOAT(X)(25&& &&& =&& X&& &&& =&& 53)代表一个双精密浮点数字。
相关文章:
QQ:6584830
8:00-21:00float 判断 小数是否为零
简单有关问题:怎么判断float小数部分是否为零
简单问题:如何判断float小数部分是否为零?我的想法是float new,old=10.01;int tmp=(int)new=(float)if(0==(new-float))...太烦琐,有没高效点的方法?解决方案探讨我的想法是float new,old=10.01;int tmp=(int
Sql Server
怎么判断是否
如何判断是否
是小数?如& TBTB.c1
123.2323TB.c2
9.0000select * FROM TB WHERE TB.c1 ??? 判断小数解决方案SQL code
DECLARE @i DECIMAL(18,3)
SET @I = 12.3333
SELECT CASE
java 判断是否数字和float精确到小数点后几位
java 判断是不是数字和float精确到小数点后几位
static class ValidateIsNumberic {
public static boolean isNumeric(String str){
& for (int i = str.length();--i&=0
float类型的数字,保留两位小数?解决办法
float类型的数字,保留两位小数?float类型的数字,保留两位小数?解决方案恩,可以2位
解决方案用DecimalFormat进行数值的格式化,保证保留两位小数。
DecimalFormat myFormat = new DecimalFormat( &0.00 &);
mysql float怎样保存小数啊解决方法
mysql float怎样保存小数啊我设置一个字段类型为float ,但是插入小数,保存到数据库里就成了整数了我在网上看把float 改成float(5,2)就能保存两位小数了,不超过5位数字,这个5,2在哪设置的啊,我把长度改成5,2就报错了解决方案
phpmyamin中
长度中不可以改吗?
hibernate+mysql float门类无法插入小数
hibernate+mysql float类型无法插入小数
往数据库里面插入小数,结果被四舍五入为整数。当时看见这个情况让我很是奇怪。经不完全查证原因如下:
当数据大于32767小数的部分就没法存储(出自:http
float转换成string保存两位小数
float转换成string保留两位小数float转换成string保留两位小数,如果没有小数位,保存.00,例如float a=11.00转换成string stra=&11.00&解决方案
float a = 11.00f;
判断输入小数的位数
判断输入小数的位数int & main()
scanf( &%d &,&a)
if(a*100==(int)(a*100))
怎么让float型保留两位小数?多谢!(附简码)
如何让float型保留两位小数?谢谢!(附简码)可以得到两个int类型的数值。然后相除得到一个float类型的数据,再把这个float数据转换为字符串。Java code
int totalQ; //两个int类型数值
int totalS;
Float average = new Float(0.00
Sql Server
简单有关问题,float类型怎么保留2位小数
简单问题,float类型如何保留2位小数我有一个表Table1,里面有一个字段column1,定义为float类型
我插入一个数据,怎么样可以让它自动保留两位小数.例如我插入123。它在数据表里是123.00 & 。插入123.456 & ,经过四舍五入结果是123.46
Sql Server
100分,关于float字段保留小数的有关问题
100分,关于float字段保留小数的问题我当前有一个表Table1,一个字段Price(float类型)
我尝试插入一些数据
insert & into & table1 & values(123) &
& 数据库里显示是123.0
Sql Server
问:怎么将float的小数控制在2位
问:如何将float的小数控制在2位有什么办法控制小数的位数,我的数据类型为float,但我用money类型时,为什么0显示不出来?解决方案DECLARE @AA NUMERIC(9,2)
SET @AA=8.2343
SELECT @AA
解决方案或者
sql2000中money类型小数点前显示零
Sql Server
float小于1的小数 自动省去前面的0解决方法
float小于1的小数 自动省去前面的0比如我输0.5
它直接给我显示 .5
我可是要打印给客人看的 这怎么行 有什么办法改成0.5么?解决方案
控制面板=》区域和语言选项=》区域选项=》自定义=》.7改成0.7
float和double的小数部分是怎么转成二进制的
float和double的小数部分是如何转成二进制的float和double的小数部分是如何转成二进制的,谢谢!解决方案
找点资料看看就明白了:任何数据在内存中都是以二进制(1或着0)顺序存储的,每一个1或着0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2字节)的short int型变量的值
JavaScript
用js进展正负小数及范围判断
用js进行正负小数及范围判断
最近项目中遇到一个js判断:允许输入正负数、小数,并且输入值有范围限制,而且相互之间有大小比较。
function checkNumber(id){
var eValue = document.getElementById(id).
文章评论 以下网友留言只代表其个人观点,不代表本网站的观点和立场。

我要回帖

更多关于 c float保留两位小数 的文章

 

随机推荐