MySQL数据类型--------浮点类型实战

1. 背景

* MySQL支持的浮点类型中有单精度类型(float), 双精度类型(double),和高精度类型(decimal),在数字货币类型中推荐使用高精度类型(decimal)来进行应用.

 * MySQL浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0。

2. 整数类型所需的存储和值范围

类型 占用空间 精度 精确性
FLOAT 4 单精度 精确到小数点后7位小数
DOUBLE 8 双精度 精确到小数点后15位小数
DECIMAL 变长 高精度 精确到小数点后65位小数

3. 浮点数应用中的 M / G * G (!=|=)(不一定等于) M

M = 3.1415 G = 2.1542,统一精确到小数点后6位

* 单精度(float)应用

   * 创建float_test 表

mysql> CREATE TABLE float_test(
    -> m FLOAT(10,6),
    -> g FLOAT(10,6)
    -> )ENGINE=INNODB CHARSET=utf8mb4;
Query OK, 0 rows affected (0.06 sec)

   * 插入 m 与 g 的数据

mysql> INSERT INTO float_test SELECT 3.1415,2.1542;
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from float_test;
+----------+----------+
| m        | g        |
+----------+----------+
| 3.141500 | 2.154200 |
+----------+----------+
1 row in set (0.00 sec)

   * 进行 M / G * G 运算

mysql> SELECT m / g * g, m FROM float_test;
+--------------+----------+
| m / g * g    | m        |
+--------------+----------+
| 3.1414999962 | 3.141500 |
+--------------+----------+
1 row in set (0.00 sec)

* 双精度(double)应用

   * 创建double_test 表

mysql> CREATE TABLE double_test(
    -> m DOUBLE(10,6),
    -> g DOUBLE(10,6)
    -> )ENGINE=INNODB CHARSET=utf8mb4;
Query OK, 0 rows affected (0.08 sec)

   * 插入 m 与 g 的数据

mysql> INSERT INTO double_test SELECT 3.1415,2.1542;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from double_test;
+----------+----------+
| m        | g        |
+----------+----------+
| 3.141500 | 2.154200 |
+----------+----------+
1 row in set (0.00 sec)

   * 进行 M / G * G 运算

mysql> SELECT m / g * g, m FROM double_test;
+--------------+----------+
| m / g * g    | m        |
+--------------+----------+
| 3.1415000000 | 3.141500 |
+--------------+----------+
1 row in set (0.01 sec)

* 高精度(decimal)应用

   * 创建decimal_test 表

mysql> CREATE TABLE decimal_test(
    -> m DECIMAL(10,6),
    -> g DECIMAL(10,6)
    -> )ENGINE=INNODB CHARSET=utf8mb4;
Query OK, 0 rows affected (0.05 sec)

   * 插入 m 与 g 的数据

mysql> INSERT INTO decimal_test SELECT 3.1415,2.1542;
Query OK, 1 row affected (0.02 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM decimal_test;
+----------+----------+
| m        | g        |
+----------+----------+
| 3.141500 | 2.154200 |
+----------+----------+
1 row in set (0.00 sec)

   * 进行 M / G * G 运算

mysql> SELECT m / g * g, m FROM decimal_test;
+--------------------+----------+
| m / g * g          | m        |
+--------------------+----------+
| 3.1415000000000000 | 3.141500 |
+--------------------+----------+
1 row in set (0.00 sec)

4. 浮点类型应用总结

* 浮点数如果不写精度和标度,则会按照实际显示

 * 如果有精度和标度,则会将数据四舍五入后插入,系统不报错

 * DECIMAL如果不设置精度和标度,刚按照默认的(10,0)进行操作,如果数据超过了精度和标度值,则会报错。

* 账务、账务系统必须要用DECIMAL类型确定精确与资金安全。


5. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。

时间: 2024-08-05 15:59:52

MySQL数据类型--------浮点类型实战的相关文章

MySQL数据类型--------整数类型实战

1. 背景 * MySQL支持SQL标准整数类型整数(或INT)和SMALLINT.作为标准的扩展,MySQL还支持整数类型TINYINT.MEDIUMINT和BIGINT 2.  整数类型所需的存储和值范围 类型 占用空间 最小值 最大值 (字节) (signed/Unsigned) (signed/Unsigned) TINYINT 1 -128 127 0 255 SMALLINT 2 -32768 32767 0 65535 MEDIUMINT 3 -8388608 8388607 0

MySQL数据类型--------字符串类型实战

1. 背景 * MySQL支持的字符串类型有CHAR.VARCHAR.二进制.var二进制.BLOB.文本等等. 2. 字符串类型所需的存储和值范围 类型 说明 N的含义 是否有字符集 最大长度 CHAR(N) 定义字符 字符 是 255 VARCHAR(N) 变长字符 字符 是 16384 BINARY(N) 定长二进制字节 字节 否 255 VARBINARY(N) 变长二进制字节 字节 否 16384 TINYBLOB 二进制大对象 字节 否 256 BLOB 二进制大对象 字节 否 16

mysql数据类型——浮点和定点型

mysql数据类型 字节 含义 float(m,d)           4字节  单精度浮点型,8位精度,m是十进制数字的总个数,d是小数点后面的数字个数 double(m,d)        8字节 双精度浮点型,16位精度 float(7,4)的可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001 参数m存储数字的总长度,d却不同,影响到精度,小数点后的位数. 比如设一个字段定义为float(5,3),如果插入一个数123.456

mysql数据类型——时间类型

四种日期格式: 每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值. YEAR         0000 YYYY 年  '2015' DATE         0000-00-00  YYYY-MM-DD     日期 '2015-04-24' TIME          00:00:00  HH:MM:SS        时间'12:25:36' DATETIME       0000-00-00 00:00:00  

mysql 数据库服务概述 、 构建MySQL服务器 、 数据库基本管理 、 MySQL数据类型 、

08:30------09:0009:00------12:00ftp服务器:172.40.50.117 7000软件 softpackage/mysql笔记 nsd1710/课程名称练习 homework 庞丽静 静静老师第四阶段:数据库管理 7天 DBA 安全与监控 6天 IDC监控集群与存储 5天+++++++++++++++++++++数据库管理:一 搭数据库服务器二 MySQL数据库服务的基本管理三 数据管理四 用户授权与权限撤销五 数据备份与恢复六 MySQL主从同步七 数据读写分离

69期-Java SE-031_MySQL-001-002 创建表、MySQL数据类型、数据的管理(数据库结构、数据表、数据)、SQL 函数

### 创建表 1.创建数据库 ```sql create database mstest default character set utf8 collate utf8_general_ci ``` 2.创建数据表 ```sql create table user( id int, name varchar(11) ) ``` Java 数据类型:基本数据类型 byte short int long double float boolean char ? 引用类型 MySQL 数据类型 - 整

Java数据类型和MySql数据类型对应表(转)

Java数据类型和MySql数据类型对应表 java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N CHAR java.lang.String 1   BLOB L+N BLOB java.lang.byte[] -4   TEXT 65535 VARCHAR java.lang.String -1        

三、MySQL数据类型

.MySQL数据类型数值类型        语句        大小    范围(有符号)     范围(无符号)微小整数    tinyint    1k     -128-127        0~255小整数        smallint    2k    -32768~32767        0~65535中整数        mediumint    3k    -2(23)~2(23)-1    0~2(24)-1大整数        int        4k    -2(31

MYSQL——数据类型

MYSQL——数据类型 整数类型 日期类型 字符串类型