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

news/2024/7/3 0:48:05

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. 整数类型所需的存储和值范围

类型占用空间精度精确性
FLOAT4单精度精确到小数点后7位小数
DOUBLE8双精度精确到小数点后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,如需转载请自行联系原作者





http://lihuaxi.xjx100.cn/news/239712.html

相关文章

windows指令

为什么80%的码农都做不了架构师?>>> C:\Windows\System32\drivers\etc nbtstat -a 1.7.2.2s 检查该IP的主机名称 WExNmU5Z windows启动配置界面 在“运行”中输入“msconfig mstsc -admin 远程 虚拟机的判断:如果有vmtoolsd.exe进程就是虚拟…

1:1 人脸比对 开源_Hacktoberfest:我的开源门户

1:1 人脸比对 开源by Maribel Duran通过Maribel Duran Hacktoberfest:我的开源门户 (Hacktoberfest: My Gateway to Open Source) “Individually, we are one drop. Together, we are an ocean.”“就个人而言,我们只是一滴滴。 在一起,我们…

c语言函数注释例子,C语言实例说明

原标题:C语言实例说明上一节,我们大致总揽了一个简单C程序的框架,程序如下:123456789#include /*引入头文件*/int main( void ) /*一个简单的C程序*/{int number; /*定义个名字叫做number的变量*/number2014; /*给number赋一个值*…

react组件样板_如何构建自己的React样板

react组件样板by Nick Karnik尼克卡尼克(Nick Karnik) 如何构建自己的React样板 (How to build your own React boilerplate) 什么是样板? (What is a Boilerplate?) In programming, the term boilerplate code refers to blocks of code used over and over aga…

私有vlan

一 拓扑图 二 配置私有vlan(pvlan) 只有VTP模式为透明模式,才能配置pvlan (1)配置pc1-4及s2(给测试用) pc1-4按照拓扑图上的说明配置 s2(config)#interface fastEthernet 0/1 s2(config-if)#switchport mode access s…

jfinal整合shiro回顾

2019独角兽企业重金招聘Python工程师标准>>> 目前jfinal使用shiro进行身份验证和授权的后台实现已完成,现在我再来总结下学习过程及代码实现过程。最近半年多项目开发都用.net,但又不甘心用了一年多的java,jfinal就这样被废弃&…

怎么用c语言做自动回复消息,【微信开发学习笔记】01消息自动回复关键词自动回复...

消息自动回复添加第10行代码&#xff0c;作用是调用第22行的responseMsg回复信息方法<?php /*** wechat php test*///define your tokendefine("TOKEN", "test");$wechatObj new wechatCallbackapiTest();//$wechatObj->valid();//调用回复方法$we…

渐进式web应用程序_渐进式Web应用程序简介

渐进式web应用程序Interested in learning JavaScript? Get my ebook at jshandbook.com有兴趣学习JavaScript吗&#xff1f; 在jshandbook.com上获取我的电子书 Progressive Web Apps (PWA) are the latest trend in mobile application development using web technologies.…