MySQL中的float和decimal类型有什么区别

MySQL中的float和decimal类型有什么区别

decimal 类型可以精确地表示非常大或非常精确的小数。大至 1028(正或负)以及有效位数多达 28 位的数字可以作为 decimal类型存储而不失其精确性。该类型对于必须避免舍入错误的应用程序(如记账)很有用。

float是浮点数,不能指定小数位。 
decimal是精确数,可以指定精度。 
对mysql 5来说 decimal(p,s)中p最大为65,S最大为30 
decimal数据类型最多可存储 38 个数字,它存储了一个准确(精确)的数字表达法,不存储值的近似值。

当数据值一定要按照指定精确存储时,可以用带有小数的decimal数据类型来存储数字。 
float和real数据类型被称为近似的数据类型。不存储精确值.当要求精确的数字状态时,比如在财务应用程序中,在那些需要舍入的操作中,或在等值核对的操作中,就不使用这些数据类型。这时就要用integer、decimal、money或smallmone数据类型。

在 WHERE 子句搜索条件中(特别是 = 和 <> 运算符),应避免使用float或real列。最好限制使用float和real列做> 或 < 的比较。

float,double容易产生误差,对精确度要求比较高时,建议使用decimal来存,decimal在mysql内存是以字符串存储的,用于定义货币要求精确度高的数据。在数据迁移中,float(M,D)是非标准定义,最好不要这样使用。M为精度,D为标度。

mysql> create table t1(c1 float(10,2), c3 decimal(10,2)); 
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t1 values(1234567.23, 1234567.23); 
Query OK, 1 row affected (0.01 sec)

mysql> select * from t1; 
+————+————+ 
| c1 | c3 | 
+————+————+ 
| 1234567.25 | 1234567.23 | 
+————+————+ 
1 row in set (0.02 sec)

mysql> insert into t1 values(9876543.21, 9876543.12); 
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> select * from t1; 
+————+————+ 
| c1 | c3 | 
+————+————+ 
| 1234567.25 | 1234567.23 | 
| 9876543.00 | 9876543.12 | 
+————+————+ 
2 rows in set (0.00 sec)

不定义fload, double的精度和标度时,存储按给出的数值存储,这于OS和当前的硬件有关。

decimal默认为decimal(10,0)

因为误差问题,在程序中,少用浮点数做=比较,可以做range比较。如果数值比较,最好使用decimal类型。

精度中,符号不算在内:

mysql> insert into t1 values(-98765430.21, -98765430.12); 
Query OK, 1 row affected (0.01 sec)

mysql> select * from t1; 
+————–+————–+ 
| c1 | c3 | 
+————–+————–+ 
| 1234567.25 | 1234567.23 | 
| 9876543.00 | 9876543.12 | 
| -98765432.00 | -98765430.12 | 
+————–+————–+ 
3 rows in set (0.00 sec)

float占4个字节,double占8个字节,decimail(M,D)占M+2个字节。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112360.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月9日 上午10:00
下一篇 2021年11月9日 上午10:00


相关推荐

  • golang deepcopy_mongodb主从复制原理

    golang deepcopy_mongodb主从复制原理Go语言中所有赋值操作都是值传递,如果结构中不含指针,则直接赋值就是深度拷贝;如果结构中含有指针(包括自定义指针,以及切片,map等使用了指针的内置类型),则数据源和拷贝之间对应指针会共同指向同一块内存,这时深度拷贝需要特别处理。目前,有三种方法,一是用gob序列化成字节序列再反序列化生成克隆对象;二是先转换成json字节序列,再解析字节序列生成克隆对象;三是针对具体情况,定制化拷贝。前两种方法虽……

    2022年10月2日
    5
  • 用python绘制圆(python用函数绘制椭圆)

    同时需要了解Numpy和Matplotlib相关知识。看代码吧,仔细了解清楚每句代码,每个函数。#-*-coding:utf-8-*-#!python3importnumpyasnpimportmatplotlib.pyplotasplt#==========================================#圆的基本信息#1.圆半径r=2.0#2.圆…

    2022年4月14日
    144
  • Sparse Filtering 学习笔记(三)目标函数的建立和求解

    Sparse Filtering 学习笔记(三)目标函数的建立和求解SparseFilter 是一个用于提取特征的无监督学习算法 与通常特征学习算法试图建模训练数据的分布的做法不同 SparseFilter 直接对训练数据的特征分布进行分析 在所谓 好特征 的指导下构建目标函数来进行优化 其中只涉及一个可调参数 本文将主要讨论两个问题 1 什么样的特征是好的特征 2 如何利用好特征的条件来构造 SparseFilter 的目标函数

    2026年3月26日
    2
  • 单片机(AT89C51)的串行通信实验

    单片机(AT89C51)的串行通信实验串口通信的重要性和基础就不用我多讲了吧 基础不懂直接点链接 https blog csdn net weixin article details 这一次的重点是讲解几个串口的实验来加深自己对串口通信的理解 实验一 将一个简单的字符串输出到单片机中 实验目的 实现输出 nihao 用 VIRTUALTERMI 显示出来

    2025年7月1日
    7
  • 即梦图片 3.0从基础到高阶的创作指南

    即梦图片 3.0从基础到高阶的创作指南

    2026年3月12日
    3
  • acwing1185. 单词游戏(欧拉图)「建议收藏」

    acwing1185. 单词游戏(欧拉图)「建议收藏」有 N 个盘子,每个盘子上写着一个仅由小写字母组成的英文单词。你需要给这些盘子安排一个合适的顺序,使得相邻两个盘子中,前一个盘子上单词的末字母等于后一个盘子上单词的首字母。请你编写一个程序,判断是否能达到这一要求。输入格式第一行包含整数 T,表示共有 T 组测试数据。每组数据第一行包含整数 N,表示盘子数量。接下来 N 行,每行包含一个小写字母字符串,表示一个盘子上的单词。一个单词可能出现多次。输出格式如果存在合法解,则输出”Ordering is possible.”,否则输出”The

    2022年8月9日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号