当前位置: 首页 > 编程日记 > 正文

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

类型占用空间精度精确性
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,如需转载请自行联系原作者




相关文章:

山寨上网本溃败的两点教训

不是马后炮。08年11月份,笔者写过一篇《上网本难以复制山寨机的辉煌》(以下简称《辉煌》),从消费取向和价格两个方面着手,分析认为山寨上网本市场有限,难以复制山寨手机的市场奇迹。现在看来,笔…

分享一个expect的脚本

分享一个expect的脚本,可以用于Linux机器之间远程执行命令: #!/usr/bin/expect -fset ipaddress [lindex $argv 0] set user [lindex $argv 1] set passwd [lindex $argv 2] set cmd [lindex $argv 3] set timeout [lindex $argv 4]spawn -noecho ssh $u…

今晚直播 | 深入浅出理解A3C强化学习

强化学习是一种比较传统的人工智能手段,在近年来随着深度学习的发展,强化学习和深度学习逐渐结合在了一起。这种结合使得很多原来无法想象的工作有了可能,最令我们瞩目的莫过于AlphaGo战胜李世石,以及OpenAI团队的机器人可以在团战…

正则表达式口诀及教程(推荐)

正则其实也势利,削尖头来把钱揣; (指开始符号^和结尾符号$)特殊符号认不了,弄个倒杠来引路; (指\. \*等特殊符号)倒杠后面跟小w, 数字字母来表示; &#xff0…

ssh其他机器的Expect脚本

ssh登陆其他机器的Expect脚本 #!/usr/bin/expect -fset user [lindex $argv 0] set ipaddr [lindex $argv 1] set passwd [lindex $argv 2]spawn ssh -l $user $ipaddrexpect "password:" send "$passwd\r" interact或者: #!/usr/bin/expect -f…

今晚8点直播 | 深入浅出理解A3C强化学习

强化学习是一种比较传统的人工智能手段,在近年来随着深度学习的发展,强化学习和深度学习逐渐结合在了一起。这种结合使得很多原来无法想象的工作有了可能,最令我们瞩目的莫过于AlphaGo战胜李世石,以及OpenAI团队的机器人可以在团战…

40.lombok在IntelliJ IDEA下的使用

转自:https://www.cnblogs.com/yjmyzz/p/lombok-with-intellij-idea.html lombok是一款可以精减java代码、提升开发人员生产效率的辅助工具,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码。代码越少,意味着出bug的…

C++之Boost使用

1. Get & Build & Install Boost download boost from http://www.boost.org/ 进入boost目录,使用命令: ./bootstrap.sh --prefixpath/to/installation ./b2 install 如此之后: leave Boost binaries in the lib/ subdirectory…

这就是芬兰:先让全国1%的人学起AI!

译者 | 大鱼责编 | 琥珀出品 | AI科技大本营【AI科技大本营导语】全球最大的手机制造商诺基亚、著名游戏《愤怒的小鸟》的开发商 Rovio,这两大曾名噪一时的科技公司都来自同一个国家——芬兰。很多人会问:在如此激烈的竞争环境下,为什么如此小…

Linux 裸设备基础知识(转)

1、裸设备定义:一块没有分区的硬盘,称为原始设备(RAW DEVICE)或者是一个分区,但是没有用EXT3,OCFS等文件系统格式化,称为原始分区(RAW PARTITION)以上两者都是裸设备 2、裸设备的绑定有文件系统的分区是采用mount的方式挂载到某一个挂载点的…

吴恩达与LG握手合作!

图片来自LG官网作者 | 琥珀出品 | AI科技大本营在近日举办的 CES 大会上,人工智能领域知名科学家、Landing.ai 创始人兼 CEO 吴恩达(Andrew Ng)与 LG(LG Electronics)总裁兼 CTO IP. Park 在拉斯维加斯签署了战略合作伙…

linux上安装mysql,tomcat,jdk

Linux 上安装 1 安装jdk 检测是否安装了jdk 运行 java –version若有 需要将其卸载a) 查看安装哪些jdk rmp –qa |grep java b) 先卸载openjdk 1.7 c) 在卸载openjdk 1.6 使用rpm –e - -nodeps 卸载的包 安装jdka) 上传jdk到linux 使用Xftp5…

现代人的无知什么样

以前没有知识的人就是无知! 但现在变了!一个博士却不会用他的知识挣钱养家糊口算不算无知,一个人大学毕业却不会学习算不算无知,一个经理在自己的电脑上找不到自己存的东西算不算无知,有知识却不会表达的人算不算无知…

zz Expect的安装

转载一篇靠谱的文章,按照文章所述方法一次成功。只不过我的expect二进制文件最后实在tcl的bin目录下,而不是expect的bin目录下,这个令我有些疑惑,whatever,不算什么大问题,注意一下就好了。A. Tcl 安装 主页…

分享一个ssh打通的脚本

分享一个ssh打通的脚本,经过测试可用。目前只能单向打通,且要求本地用户名为admin(写入代码,可简单修改)。本身只是个人使用,故通用性、异常情况考虑不多,大家可以做个参考。 补充一点,Important Tip&…

从云计算到AI:NetApp的数据网络转型之道

毫无疑问,在 AI、大数据、云计算等新技术潮流的冲击下,各行业企业的数字化转型进程日益加速,社会正在进入一个全新的数据融合时代。这一过程中,人们一方面对技术予以高期待,期望给行业进行业务重构,但另一方…

侧方位停车技巧

侧方位停车技巧 侧方位停车相对来说是比较容易的,只要掌握要领就能够正确地倒入车位中。具体要领如下: 第一步先打右转向灯,挂倒档,保持车辆平稳、缓慢地倒车;第二步回头看桩,当右后车门三角窗中部与1号桩&…

微信是把“杀猪刀”,还改变了我的表情包

整理 | Jane出品 | Python大本营1 月 9 日上午,一年一度的微信公开课 PRO 在广州举行,会上发布了《2018微信年度数据报告》。报告的第一部分是 2018 年微信用户活跃数、发送消息与音视频通话数据;第二部分根据微信用户画像,针对不…

中缀、前缀表达式

为什么80%的码农都做不了架构师?>>> 一、后缀表达式求值 后缀表达式也叫逆波兰表达式,其求值过程可以用到栈来辅助存储。假定待求值的后缀表达式为:6 5 2 3 8 * 3 *,则其求值过程如下: 1&#xf…

Linux之tee命令

语  法:tee [-ai][--help][--version][文件...]补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。参  数:-a或--append  附加到既有文件的后面,而非覆盖它&…

在WinXP上通过Virtual PC安装WinCE

开发WinCE程序的调试,要么用Emulator,要么用触摸屏等等硬件,模拟器不真实,硬件又难找还不易随身带。象我这样穷得买不了带CE的PDA,懒得不想下巨型的PB、VS,要随时调试还真不容易。试过VMWare,效…

valgrind概述及错误分析

Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具.而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。 Valgrind包…

超过C++、压制Java与C,Python拔得TIOBE年度编程语言!

作者 | 屠敏来源 | CSDN(ID:CSDNNews)如同两个月前,TIOBE 编程语言社区于官网预料的那般,2018 年的年度编程语言终将在一众老牌编程语言如 Java、C、C、Python、Visual Basic .NET 中诞生。近日,TIOBE 排行…

CodeArt SharePoint Permission Extension 1.0 beta publish

正式发布1.0版本,已经打包成wsp,请到以下地址下载:http://sppex.codeplex.com/Release/ProjectReleases.aspx?ReleaseId30671 解压后,运行wsp_addsolution.cmd安装解决方案,到管理中心-》操作-》解决方案管理安装解决…

《请不要回应外星人2019》

作者 | 若名出品 | AI科技大本营 今天早上,关于“加拿大天文学家发现 15 亿光年外讯号”的话题一度被推到了微博热搜榜第二位,当然也引发了全球范围内的关注。舆论导向都是,“人类该不该做出回应?”翻了一圈评论,人…

如何使用Log4j?

要学习什么是log4j,那我们也知道log4j能干吗??这里就不阐述了,可以自己去google1、 Log4j是什么? Log4j可以帮助调试(有时候debug是发挥不了作 用的)和分析,要下载和了解更详细的内容,还是访问其官方网站吧&#xf…

解决:无法创建该DNS 服务器的委派

第一次安装AD DNS的时候,你可能遇到以下的提示,无法创建该DNS 服务器的委派,这是一个提示,而不是一个报错。 以下是详细的说明。 将具有 DNS 服务器的新 Windows Server 2008 或 Windows Server 2008 R2 域控制器安装到 treyr…

SQL to Elasticsearch java code

把Elasticsearch当成Database用,因为Elasticsearch不支持SQL,就需要把SQL转换成代码实现。 1.按某个field group by查询count SELECT fieldA, COUNT(fieldA) from table WHERE fieldC "hoge" AND fieldD "huga" AND fieldB…

【转载】linux静态链接库与动态链接库的区别及动态库的创建

这篇文章对于动态库的概念及使用介绍的很不错,故收藏了。一、引言通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library&a…

买不到回家的票,都是“抢票加速包”惹的祸?

作者 | 屠敏来源 | CSDN(ID:CSDNNews)距离国家法定春节假日不足一个月,且首批除夕票已于近日正式开售。但万万没想到,当人、钱、手机、PC、iPad 万事俱备之际,东风刮得太快,眼巴巴盯着将于整点开…