mysql的float取值范围_mysql float精度与范围总结 – numeric「建议收藏」

mysql的float取值范围_mysql float精度与范围总结 – numeric「建议收藏」…是ture,不适用范围:不适用于检测可为0的参数。is_numeric();——只适用于检测数字,但假如参数名不存在,会出错,因此不适合于第一层检测。综合示例:复制代码代码如下:FLOAT类型用于表示近似数值数据类型。SQL标准允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范围)。MySQL还支持可选的只用于确定存储大小的精度规定。0到23的精度对应FLOAT列的4…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

58e8d81c4a0d115f2a9f9f245fa77d87.png

…是ture,不适用范围:不适用于检测可为0的参数。 is_numeric();——只适用于检测数字,但假如参数名不存在,会出错,因此不适合于第一层检测。 综合示例: 复制代码 代码如下:

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.21999979 !

因此,在编程中应尽量避免做浮点数的比较,否则可能会导致一些潜在的问题!除了这些,还应注意浮点数中的一些特殊值,如 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(131072.32,131072.32);

Query OK, 1 row affected (0.07 sec)

mysql> select * from test;

+———–+———–+

| c1| c2|

+———–+———–+

| 131072.31 | 131072.32 |

+———–+———–+

1 row in set (0.00 sec)

从上面的例子中我们看到c1列的值由131072.32变成了131072.31,这就是浮点数的不精确性造成的。

在mysql中float、double(或real)是浮点数,decimal(或numberic)是定点数。

浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围;

它的缺点是会引起精度问题。

Float类型和double类型的区别

FLOAT[(M,D)] [ZEROFILL]

一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有 <24 的一个参数表示一个单精密浮点数字。

DOUBLE[(M,D)] [ZEROFILL]

一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308。M是显示宽度而D是小数位数。没有一个参数的DOUBLE或FLOAT(X)(25 < = X < = 53)代表一个双精密浮点数字。

…是ture,不适用范围:不适用于检测可为0的参数。 is_numeric();——只适用于检测数字,但假如参数名不存在,会出错,因此不适合于第一层检测。 综合示例: 复制代码 代码如下:

…if (!$dateTimeString) { $dateTimeString = time(); } $numeric = ”; $add_space = false; for($i=0;$i

本文介绍php出现Warning: A non-numeric value encountered问题,用实例分析出现这种错误的原因,并提供避免及解决问题的方法。 <?phperror_reporting (E_ALL);

ini_set(‘display_errors’,

bitsCN.com

关于mysql数据库的数据类型numeric和decimal decimal(numeric ) 同义,用于精确存储数值decimal 数据类型最多可存储 38 个数字,所有数字都能够放到小数点的右边。decimal 数据类型存储了一个准确(精确)的数…

declare @tmpt table(a int,b numeric(20,3),c numeric(20,3)) insert into @tmpt EXECUTE cbdbfxt 2005,5,’670,’ select * from @tmpt drop table #tmpt create

is_numeric:检测是否为数字字符串,可为负数和小数 ctype_digit:检测字符串中的字符是否都是数字,负数和小数会检测不通过 注意,参数一定要是字符串,如果不是字符串,则会返回0/FASLE 下面是测试例子: …

…re,不适用范围:不适用于检测可为0的参数。is_numeric();——只适用于检测数字,但假如参数名不存在,会出错,因此不适合于第一层检测。 综合示例: <?php ini_set(“display_errors”,1); //ini_set(…

…r>echo “0 is null;”; }else{ echo “0 is not null;”; } if(is_numeric($a)){ echo “0 is numeric;”; }else{ echo “0 is not numeric;”; } if(is_string($a))

…int类型的数字的时候return 1,否则return 0is_numeric:是数字/数字字符串(要是纯的数字字符串,有字符就返回false),return 1example:is_numeric(1234);//trueis_nu…

…ts,name,’.$id.’,id’,

‘mobile’ => ‘required|numeric|min:10|max:10’,

‘dist_name’ => ‘req

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234276.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Django流程_菜鸟裹裹收费标准

    Django流程_菜鸟裹裹收费标准Django教程一、Django安装1、Django版本对应的Python版本:2、Django下载地址:3、安装(无需下载)4、验证安装cmd进入python获取版本信息一、Django安装1、Django版本对应的Python版本:2、Django下载地址:https://www.djangoproject.com/download/3、安装(无需下载)打开cm…

  • oracle import/export 命令[通俗易懂]

    oracle import/export 命令[通俗易懂]exp/imp实例   exphelp=y查看帮助exp1、expusr/pwd@sid file=c:\tb.dump tables=tb1  如果是导出多个表,tables=(tb1、tb2)2、expusr/pwd@sid file=c:\tb.dump –全部导出3、expusr/pwd@sid file=c:\tb.dump owne

  • idea设置java版本_手机安卓版本怎么升级

    idea设置java版本_手机安卓版本怎么升级一、背景即使我电脑安装的JDK版本是8,然而在idea运行中常常提示xxjdk1.5已过时之类的,why?明明是我装的JDK8啊二、解决鼠标点击file->setting,进入idea的设置页面settings,根据截图操作,懒得写了,最后点击ok然后,鼠标点击file->ProjectStructure…

  • java把list转为map(对象转成map)

     Collection&lt;实体类&gt;valueCollection2=map2.values();  List&lt;实体类&gt;valueList=newArrayList&lt;PurchaseDeatilVo&gt;(valueCollection2);//map转list

  • Django(32)自定义过滤器[通俗易懂]

    Django(32)自定义过滤器[通俗易懂]前言虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。自定义过滤器首先在某个app中,创建

  • Gecko浏览器_ie内核浏览器有哪些

    Gecko浏览器_ie内核浏览器有哪些GeckoFX是一个运用C#写的windows窗体控件(具体在WPF项目中怎么用winForm的控件可以参考博客园的许多博文或者说我将来有时间会写一个wpf的控件,不过现在时间来不及,好像对wpf控

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号