MySQL中十进制类型用法的简单介绍

  

MySQL中支持浮点数的类型有浮<代码> ,<代码>双和<代码>十进制>   

对于精度比较高的东西,比如钱,建议使用十进制类型,不要考虑浮动,翻倍,因为他们容易产生误差,数字和小数同义,数字将自动转成小数。

  

十进制从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
  2,,123456789.12
  3,,123456789.13
  4,,123456789.00
  5,,123456.24
  6,,

123456.24      

<强>总结

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

MySQL中十进制类型用法的简单介绍