MySQL中支持浮点数的类型有浮<代码> 代码>,<代码>双代码>和<代码>十进制> 代码类型,小数类型不同于浮点数和双精度数,小数实际是以串存放的.DECIMAL可能的最大取值范围与双一样,但是其有效的取值范围由M和D的值决定。如果改变M而固定D,则其取值范围将随M的变大而变大。
对于精度比较高的东西,比如钱,建议使用十进制类型,不要考虑浮动,翻倍,因为他们容易产生误差,数字和小数同义,数字将自动转成小数。
十进制从MySQL 5.1引入,列的声明语法是小数(M, D)。在MySQL 5.1中,参量的取值范围如下:
-
<李> M是数字的最大数(精度)。其范围为1 ~ 65(在较旧的MySQL版本中,允许的范围是1 ~ 254),M的默认值是10。李>
<李> D是小数点右侧数字的数目(标度)。其范围是0 ~ 30,但不得超过m . 李>
说明:浮动占4个字节,双占8个字节,decimail (M, D)占M + 2个字节。
如十进制(5,2)的最大值为9999.99,因为有7个字节可用。
所以M与D是影响小数(M, D)取值范围的关键
类型说明取值范围(MySQL & lt;3.23)取值范围(MySQL祝辞=3.23) 小数(4,1)-9.9到99.9 - -999.9到9999.9 小数(5、1)-99.9到999.9 - -9999.9到99999.9 小数(6,1)-999.9到9999.9 - -99999.9到999999.9 小数(2)-99.99到999.99 - -9999.99到99999.99 小数(6,3)-9.999到99.999 - -999.999到9999.999
给定的十进制类型的取值范围取决于MySQL数据类型的版本。对于MySQL3.23以前的版本,小数(M, D)列的每个值占用M字节,而符号(如果需要)和小数点包括在米字节中,因此,类型为十进制(5,2)的列,其取值范围为-9.99到99.99,因为它们覆盖了所有可能的5个字符的值。
#在MySQL 3.23及以后的版本中,小数(M, D)的取值范围等于早期版本中的小数(M + 2 D)的取值范围。
<强>结论:强>
-
<李>当数值在其取值范围之内,小数位多了,则直接截断小数位。李>
<李>若数值在其取值范围之外,则用最大(小)值对其填充。李>
<强> JAVA + Mysql + JPA实践强>
msyql-Decimal对应java-BigDecimal
数据表定义
@ entity 公共类{TestEntity扩展模型 @ column(可空=true, columnDefinition=靶∈?11日2)”) 公共BigDecimal价格; }
测试结果及说明
/* * * 1. mysql-decimal(9 + 2, 2)对应java-BigDecimal * 2 .整数部分9位,小数部分2位,小数四舍五入 * 3 .整除部分超过限定位数9位,报的错。 * 4 .小数部分超过位数四舍五入截断,保留2位小数 */TestEntity实体=new TestEntity (); 实体。价格=new BigDecimal (Double.toString (123456789.12 d)); entity.save ();//整数超过9位报的错/* 实体=new TestEntity (); 实体。价格=new BigDecimal (Double.toString (1234567891.123 d)); entity.save (); */实体=new TestEntity (); 实体。价格=new BigDecimal (Double.toString (123456789.123 d)); entity.save (); 实体=new TestEntity (); 实体。价格=new BigDecimal (Double.toString (123456789.126 d)); entity.save (); 实体=new TestEntity (); 实体。价格=new BigDecimal (Double.toString (123456789 d)); entity.save (); 实体=new TestEntity (); 实体。价格=new BigDecimal (Double.toString (123456.2355)); entity.save (); 实体=new TestEntity (); 实体。价格=new BigDecimal (Double.toString (123456.2356)); entity.save (); 实体=TestEntity。找到(“价格=& # 63;”、新BigDecimal (Double.toString (123456789.12 d)))当代(); system . out。println(“查询结果:“+实体。id +”、“+ entity.price);
<>强插入结果强>
1,,123456789.12
123456.24 引用>
2,,123456789.12
3,,123456789.13
4,,123456789.00
5,,123456.24
6,,<强>总结强>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
MySQL中十进制类型用法的简单介绍