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) 取值范围的关键

类型说明 取值范围(MySQL < 3.23) 取值范围(MySQL >= 3.23)

DECIMAL(4,1) -9.9 到 99.9 -999.9 到 9999.9

DECIMAL(5,1) -99.9 到 999.9 -9999.9 到 99999.9

DECIMAL(6,1) -999.9 到 9999.9 -99999.9 到 999999.9

DECIMAL(6,2) -99.99 到 999.99 -9999.99 到 99999.99

DECIMAL(6,3) -9.999 到 99.999 -999.999 到 9999.999

给定的DECIMAL 类型的取值范围取决于MySQL数据类型的版本。对于MySQL3.23 以前的版本,DECIMAL(M, D) 列的每个值占用M 字节,而符号(如果需要)和小数点包括在M 字节中。因此,类型为DECIMAL(5, 2) 的列,其取值范围为-9.99 到99.99,因为它们覆盖了所有可能的5 个字符的值。

# 在MySQL 3.23 及以后的版本中,DECIMAL(M, D) 的取值范围等于早期版本中的DECIMAL(M + 2, D) 的取值范围。

结论:

当数值在其取值范围之内,小数位多了,则直接截断小数位。

若数值在其取值范围之外,则用最大(小)值对其填充。

JAVA+Mysql+JPA实践

msyql-Decimal对应java-BigDecimal

数据表定义

@Entity

public class TestEntity extends Model {

@Column(nullable = true, columnDefinition = "decimal(11,2)")

public BigDecimal price;

}

测试结果及说明

/**

* 1.mysql-Decimal(9+2,2)对应java-BigDecimal

* 2.整数部分9位,小数部分2位,小数四舍五入

* 3.整除部分超过限定位数9位,报错.

* 4.小数部分超过位数四舍五入截断,保留2位小数

*/

TestEntity entity = new TestEntity();

entity.price = new BigDecimal(Double.toString(123456789.12d));

entity.save();

// 整数超过9位报错

/*

entity = new TestEntity();

entity.price = new BigDecimal(Double.toString(1234567891.123d));

entity.save();

*/

entity = new TestEntity();

entity.price = new BigDecimal(Double.toString(123456789.123d));

entity.save();

entity = new TestEntity();

entity.price = new BigDecimal(Double.toString(123456789.126d));

entity.save();

entity = new TestEntity();

entity.price = new BigDecimal(Double.toString(123456789d));

entity.save();

entity = new TestEntity();

entity.price = new BigDecimal(Double.toString(123456.2355));

entity.save();

entity = new TestEntity();

entity.price = new BigDecimal(Double.toString(123456.2356));

entity.save();

entity = TestEntity.find("price = ?", new BigDecimal(Double.toString(123456789.12d))).first();

System.out.println("查询结果:" + entity.id + ", " + entity.price);

插入结果

1   123456789.12

2   123456789.12

3   123456789.13

4   123456789.00

5   123456.24

6   123456.24

总结

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

mysql decimal 类型_MySQL中decimal类型用法的简单介绍相关推荐

  1. mysql raiserror_sql server数据库中raiserror函数用法的详细介绍

    sql server数据库中raiserror函数的用法 server数据库中raiserror的作用就和asp.NET中的throw new Exception一样,用于抛出一个异常或错误.这个错误 ...

  2. decimal类型对象里面定义什么类型_MySQL中Decimal类型和Float Double的区别(详解)

    MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...

  3. mysql decimal 实现_mysql中decimal的使用

    float,double,decimal区别 创建表test_float_double_decimal CREATE TABLE `test_float_double_decimal` ( `id` ...

  4. php中使用mysql的视图_MYSQL中视图的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于MYSQL中视图的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.什么是视图 执行一条SQL,将结果集保存在一张虚拟表中 (相关 ...

  5. mysql ifnull 别名_mysql中IFNULL,IF,CASE的区别介绍

    mysql中IFNULL,IF,CASE的区别介绍 发布时间:2018-04-15 09:54:57 假设有一数据表的状态字段设计为varchar类型,有以下值:NULL,pending,pendin ...

  6. Java中Synchronized的用法(简单介绍)

    简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...

  7. java synchronized静态_Java中Synchronized的用法(简单介绍)

    简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...

  8. mysql的bigint类型_MySQL中的类型:BigInt(20)与Int(20)

    我想知道BigInt,MediumInt和Int之间的区别是什么--似乎可以允许更大的数字:这似乎很明显. 但是,我可以制作一个Int(20)或一个BigInt(20),这似乎使它不一定与大小有关. ...

  9. mysql mediumint是什么类型_MySQL中数值类型中smallint、mediumint等区别是什么 - 晓雨网...

    MySQL 支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型 数值类型中又可以分为整型.浮点型,或者可以说为严格数值数据类型以及近似数值数据类型 分别为 tinyint(m).sm ...

最新文章

  1. Repeater鼠标经过变色
  2. eplan文本怎么换行_JDK 14的新特性:文本块Text Blocks
  3. NuGet(微软.NET开发平台的软件包管理工具)在VisualStudio中的安装的使用
  4. 第十一届河南省赛--A计划日
  5. eclipse error pages打红X的解决方法
  6. 了解MyBatis框架
  7. 根据表格中的数据长度自动调整表格宽度DBGrid
  8. 程序员身体容易出什么毛病..
  9. esxi5.1 添加vSwitch,转VM network to new vSwitch
  10. java实例化对象的四种方式
  11. 英雄联盟LOL静态HTML网页制作模板DⅣ+CSS学生网页作品代码游戏题材大学生网页设计作业下载
  12. C#正则表达式提取txt小说目录
  13. 无法远程连接到计算机 虚拟内存,远程桌面连接显示内存不足怎么破?
  14. java对接苹果支付
  15. FlexBox 行间距
  16. 解决 kindle 书籍字体颜色偏淡问题的方法
  17. 从Otherside土地稀缺体系聊起, Yuga Labs到底在布局什么?
  18. python装饰器(详解)
  19. 别被骗了:物联网卡骗局无处不在
  20. EDK2之debug

热门文章

  1. GSM和GPRS网络原理的基本思路
  2. GICv3软件overview手册之GICv3基本功能(3)
  3. 各个等级测试工程师所需的必要技能
  4. jsp常见面试题(1)
  5. (2021年)IT技术分享社区个人文章汇总(编程技术篇)
  6. it技术交流社区与学习资料的网站大全
  7. 如影智能:深度赋能家居行业上下游,共享全屋智能万亿市场红利
  8. 微信小程序扫码 ( wx.scanCode)的使用方法
  9. 第二章网络网络技术基础计算题及其解析[计算机网络]
  10. 微信小程序富文本标签 rich-text 图片自适应大小问题