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 表

1
2
3
4
5
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 的数据

1
2
3
4
5
6
7
8
9
10
11
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 运算

1
2
3
4
5
6
7
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 表

1
2
3
4
5
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 的数据

1
2
3
4
5
6
7
8
9
10
11
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 运算

1
2
3
4
5
6
7
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 表

1
2
3
4
5
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 的数据

1
2
3
4
5
6
7
8
9
10
11
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 运算

1
2
3
4
5
6
7
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. 总结

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

      本文转自asd1123509133 51CTO博客,原文链接:http://blog.51cto.com/lisea/1943226,如需转载请自行联系原作者

MySQL数据类型--------浮点类型实战相关推荐

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

    1. 背景 * MySQL支持的字符串类型有CHAR.VARCHAR.二进制.var二进制.BLOB.文本等等. 2. 字符串类型所需的存储和值范围 类型 说明 N的含义 是否有字符集 最大长度 CH ...

  2. P5 MySQL数据类型和类型选择

    目录 一.数值类型 优化建议 二.日期和时间类型 优化建议 三.字符串类型 优化建议 四.扩:INT显示宽度   官方文档:https://dev.mysql.com/doc/refman/5.7/e ...

  3. 数据库开发——MySQL——数据类型——数值类型

    MySQL中定义数据字段的类型对数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为四类:数值.日期/时间.字符串(字符)类型.枚举类型与集合类型. 一.数值类型 MySQL支持所有标准S ...

  4. MySQL数据类型-整数类型

    MySQL提供了多种数据类型,包括整数类型.浮点数类型.定点数类型.日期和时间类型.字符串类型.二进制数据类型: 不同的数据类型有各自的的类型,使用范围也各不相同,而且存储方式也不相同 有两种类型的数 ...

  5. mysql数据类型单选类型_单选按钮的mysql数据类型是什么?

    我正在制作一个带有单选按钮的表单(见http://jsfiddle.net/mjmitche/3c6Mc/),用户主要通过单选按钮提交数据.单选按钮的值必须是/ type应该是什么"类型&q ...

  6. mysql数据类型--[整数类型]--mediumint类型

    mediumint类型说明 类 型:mediumint 长 度:8 占用字节:3字节 有 符 号:-8388608~8388607 无 符 号:0~16777215 不指定长度时的长度为:9(实际长度 ...

  7. mysql数据类型--[整数类型]--smallint类型

    smallint类型说明 类 型:smallint 长 度:5 占用字节:2字节 有 符 号:-32768~32767 无 符 号:0~65535id smalint(M) [UNSIGNED] [Z ...

  8. mysql浮点数据怎么_MySQL数据浮点类型的实际应用操作

    MySQL数据浮点类型的实际应用操作 发布时间:2020-06-03 14:43:58 来源:51CTO 阅读:193 作者:三月 下文主要给大家带来MySQL数据浮点类型的实际应用操作,希望这些内容 ...

  9. MySQL数据库,从入门到精通:第十二篇——MySQL数据类型详解

    MySQL数据库,从入门到精通:第十二篇--MySQL数据类型详解 第 12 章_MySQL数据类型精讲 1. MySQL中的数据类型 2. 整数类型 2. 1 类型介绍 2. 2 可选属性 2. 2 ...

最新文章

  1. Jmeter连接Oracle数据库
  2. idea html ajax,在 IntelliJ IDEA 8.1中编写一个ajax jquery实例,取不到页面上的值
  3. mysql外键读锁_MySQL的锁
  4. 人工神经网络_人工神经网络实践
  5. Accelerated C++ 习题答案
  6. 【Linux文件系统监控的Java类库 inotify-java】
  7. ADVHAT: REAL-WORLD ADVERSARIAL ATTACK ON ARCFACE FACE ID SYSTEM 笔记
  8. Android应用测试篇
  9. 视频封装格式篇--MP4
  10. 【10.16 胡测】Day4 第四波胡策题
  11. 计算机窗口弹不出来桌面怎么弄,桌面显示不出来怎么办 桌面显示不出来解决方法【图文】...
  12. ps修改图片上文字的几种方法 图+文
  13. 什么是R型直流电源变压器?
  14. yocto运行时依赖规则
  15. 重装系统之硬盘安装WIN7教程
  16. 可扩展标记语言XML之一:XML的概念、作用与示例
  17. 谷歌开发者大会,拳打苹果脚踢微软
  18. 免费在线基本电气图 + 示例
  19. TCP/IP实现(九) 插口I/O
  20. An App ID with Identifier 'com.FE.BMH' is not available. Please enter a different string.

热门文章

  1. 【C++】C++11 STL算法(八):对未初始化内存的操作(Operations on uninitialized memory)、C库(C library)
  2. 【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)
  3. 【AI】图示:精确度(查准率)Precision、召回率(查全率)Recall
  4. 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...
  5. java+yeild+sleep_Java并发编程--yield sleep和wait的区别
  6. 学生管理系统(C语言版)
  7. SpringBoot复习:5(配置绑定)
  8. java面试时候算法题多吗_java程序员面试中最容易被问到的18个算法题(附答案!)...
  9. linux python版本_linux下更新Python版本并修改默认版本
  10. hash是线程安全的吗?怎么解决?_这次进程、线程、多线程和线程安全问题,一次性帮你全解决了...