`

MySQL中的float和decimal类型

阅读更多
来自网络


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个字节。

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列做> 或 < 的比较。
分享到:
评论

相关推荐

    MySQL中Decimal类型和Float Double的区别(详解)

    MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型。 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值。 float,double类型是可以存浮点数...

    MySQL中decimal类型用法的简单介绍

    与FLOAT和DOUBLE等浮点数类型不同,decimal类型以字符串形式存储,确保了数值的精确性,避免了浮点数可能出现的计算误差。 decimal类型的声明格式是`DECIMAL(M,D)`,其中M代表总数字个数,包括整数和小数部分,D...

    Java数据类型和MySql数据类型对应一览

    在本文中,我们将对 Java 数据类型和 MySql 数据类型进行对应一览,帮助开发者更好地理解和使用这两种类型。 字符串类型 在 Java 中,字符串类型对应的是 java.lang.String 类型。在 MySql 中,字符串类型对应的是...

    Java中数据类型和MYSQL中数据类型的对比

    1. 数值类型:MySQL 提供了各种数值类型,如 INTEGER (INT)、SMALLINT、DECIMAL 和 FLOAT。INT 类型与 Java 中的 int 类型相似,但 MySQL 允许更大的存储范围。DECIMAL 和 NUMERIC 类型用于存储精确的数值,适合财务...

    MySQL数据类型中DECIMAL的用法实例详解

    在MySQL中,DECIMAL类型通常表示为DECIMAL(M, D),其中M代表总数字的个数,包括整数部分和小数部分,而D则表示小数点后的位数。例如,DECIMAL(5, 2)可以存储最多5位数字,其中2位是小数。这意味着它可以存储从-999....

    Java数据类型和MySql数据类型对应表

    在 Java 编程中,了解 Java 数据类型和 MySql 数据类型的对应关系非常重要。这是因为在 Java 应用程序中,我们经常需要与数据库进行交互,而 MySql 是一种常用的关系数据库管理系统。在本文中,我们将详细介绍 Java ...

    MySql于Java数据类型对应列表

    本文将详细介绍MySQL中的各种数据类型及其在Java中的对应类型,并解释这些类型的具体含义以及它们在实际应用中的作用。 #### 数据类型对照表解析 ##### 1. VARCHAR (可变长度字符串) **显示长度:** L+N **数据库...

    MySQL数据类型全掌握

    本文将详细介绍MySQL中的主要数据类型,并通过与Oracle数据类型的对比,帮助读者更好地理解和应用这些类型。 #### 二、MySQL数据类型详解 MySQL的数据类型大致可以分为四类:数值类型、字符串类型、日期/时间类型...

    MySQL所有数据类型.pdf

    MySQL 数据类型是指在 MySQL 数据库中存储数据的方式,它决定了数据的存储格式、大小和范围。了解 MySQL 数据类型非常重要,因为它直接影响数据库的性能、可维护性和安全性。本篇文章将详细介绍 MySQL 的所有数据...

    java、mysql以及oracle数据类型对照表

    此外,Java的浮点数类型(float和double)对应MySQL的FLOAT和DOUBLE,而在Oracle中,可以使用BINARY_FLOAT和BINARY_DOUBLE。 Oracle数据库提供了更多的复杂数据类型,如OBJECT、ARRAY、REF,这些在Java中可以通过...

    MySQL数据类型选择

    MySQL 中提供了两种实数类型:DECIMAL 和 FLOAT。在 DECIMAL 类型中,MySQL 使用字符串类型存储实数,以避免精度问题。但是,这也会导致查询效率下降。在 FLOAT 类型中,MySQL 使用 CPU 的浮点数计算,以提高查询...

    MySQL 中的数据类型介绍

    4、存储空间和类型选择 选择合适的数据类型不仅影响数据库的性能,还直接影响存储需求。例如,整数类型占用的空间从小到大排序为 TINYINT 到 BIGINT,浮点数和定点数的存储空间取决于定义的精度。字符串类型中,...

    MYSQL基础:数据类型.docx

    在 MySQL 中,数据类型是定义和存储数据的重要组成部分。 MySQL 支持的各种数据类型可以分为数值类型、字符串类型、日期和时间类型、二进制类型和枚举和集合类型等。 数值类型 MySQL 支持的数值类型包括整数类型...

    mysql数据类型

    MySQL 中的浮点型包括 float 和 double 两种,分别占用 4 个字节和 8 个字节的存储空间。float(m,d) 和 double(m,d) 中的 m 表示总个数,d 表示小数位。例如,float(5,3) 表示总共 5 位,其中 3 位为小数位。 定点...

    浅谈MySQL中float、double、decimal三个浮点类型的区别与总结

    下表中规划了每个浮点类型的存储大小和范围: 类型 大小 范围(有符号) 范围(无符号) 用途 ==float== 4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+...

Global site tag (gtag.js) - Google Analytics