当前位置: 首页 > article >正文

Mysql 中的decmical类型

什么是decmical类型?
decimal是MySQL中存在的精准数据类型,语法格式“DECIMAL(M,D)”。其中,M是数字的最大数(精度),其范围为“1~65”,默认值是10;D是小数点右侧数字的数目(标度),其范围是“0~30”,但不得超过M。
MySQL中支持浮点数的类型有FLOAT、DOUBLE和DECIMAL类型,DECIMAL 类型不同于FLOAT和DOUBLE,DECIMAL 实际是以串存放的。DECIMAL 可能的最大取值范围与DOUBLE 一样,但是其有效的取值范围由M 和D 的值决定。如果改变M 而固定D,则其取值范围将随M 的变大而变大。对于精度比较高的东西,比如money,建议使用decimal类型,不要考虑float,double, 因为他们容易产生误差,numeric和decimal同义,numeric将自动转成decimal。DECIMAL从MySQL 5.1引入,列的声明语法是DECIMAL(M,D)。在MySQL 5.1中,参量的取值范围如下:M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认值是10。D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。
说明:float占4个字节,double占8个字节,decimail(M,D)占M+2个字节。
如DECIMAL(5,2) 的最大值为9999.99,因为有7 个字节可用。
所以M 与D 是影响DECIMAL(M, D) 取值范围的关键
为什么使用decmical?
float 和 double都是浮点数,都有取值范围, 都有精度范围。 因此会经常出现下面问题,定义了一个浮点数,经过一系列的计算, 它本来应该等于某个确定值,但实际上并不是。。。???
计算机进行的是二进制运算,我们输入的十进制数字会先转换成二进制,进行运算后再转换为十进制输出。float / double相减会转换成二进制,因float有效数字8位, double有效位数为16位,这就会出现存储小数位数不够的情况,这种情况下就会出现误差,解决方法就是使用BigDecimal,它的有效长度足够长,因此可代替float / double来进行加减乘除。
金融相关的开发中,金额必须是完全精确的计算,double 和 float 提供了快速的运算,然而问题在于转换为二进制的时候,有些数字不能完全转换,只能无限接近于原本的值,这就导致了你看到的不正确的结果,故不能使用double或者float,而应该采用java.math.BigDecimal。decimal(18,0) 18是定点精度,0是小数位数。
decimal(a,b) a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0。
BigDecimal
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

http://www.lryc.cn/news/2414388.html

相关文章:

  • 【机房重构】——存储过程(Stored Procedure)
  • bat知识点3_for循环
  • asp.net中打开新窗口的多种方法
  • web渗透思路及总结
  • 系统文件srclient.dll损坏出现错误提示的解决办法
  • showImg jquery插件 图片展示 js
  • 创造性思维(Creative Thinking)
  • 壁纸酷-高清,大图
  • 台达vfd一ⅴe变频说明书_DELTA台达VFD-E变频器接线图和接线注意事项
  • Kali Linux 网络扫描秘籍(二)
  • 禁止显示状态 错误    C2059    语法错误:“常数”
  • 栈溢出攻击
  • 法语常用俚语
  • 解决因d3dx9_32.dll缺少无法启动运行问题
  • Java中的递归算法
  • 集线器、交换机、路由器工作原理区别
  • [机器学习笔记] 混淆矩阵(Confusion Matrix)
  • forward和redirect的区别
  • db4o学习笔记(四)、db4o查询详解续
  • VMware虚拟机安装windows server 2012 R2教程(图文版 超详细!)
  • Visual Studio .NET 2003无法创建或打开应用程序。问题很可能是因为本地Web服务器上没有安装所需的组件
  • java filter mapping_Java Servlet Filter的两种映射方式
  • 天堂地狱启示录
  • 商城系统商业授权的那些事儿
  • 简析HTML七种网页加密解密方法
  • STM8S自学笔记-005 延时函数的3种方式
  • 泰坦尼克号建模分析-你能活下来吗?
  • 高分一号PMS相机多光谱和全色数据预处理
  • VUE通用后台管理系统(一)登录
  • python入门教程(非常详细),从零基础入门到精通,看完这一篇就够了