`
fantaxy025025
  • 浏览: 1328316 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Mysql浮点数float和double

 
阅读更多

#1

小数2位,位数不多,则可以用float其他情况,尽量用decimal

对于单精度浮点数Float:  当数据范围在±131072(65536×2)以内的时候,float数据精度是正确的,但是超出这个范围的数据就不稳定,没有发现有相关的参数设置建议:将float改成double或者decimal,两者的差别是double是浮点计算,decimal是定点计算,会得到更精确的数据。

 

#2 尽量指定精度和有效位数

 

 

看官方说的:

The FLOAT and DOUBLE types represent approximate numeric data values. MySQL uses four bytes for single-precision values and eight bytes for double-precision values.

For FLOAT, the SQL standard permits an optional specification of the precision (but not the range of the exponent) in bits following the keyword FLOAT in parentheses. MySQL also supports this optional precision specification, but the precision value is used only to determine storage size. A precision from 0 to 23 results in a 4-byte single-precision FLOAT column. A precision from 24 to 53 results in an 8-byte double-precision DOUBLE column.

MySQL permits a nonstandard syntax: FLOAT(M,D) or REAL(M,D) or DOUBLE PRECISION(M,D). Here, (M,D)means than values can be stored with up to M digits in total, of which D digits may be after the decimal point. For example, a column defined as FLOAT(7,4) will look like -999.9999 when displayed. MySQL performs rounding when storing values, so if you insert 999.00009 into a FLOAT(7,4) column, the approximate result is 999.0001.

Because floating-point values are approximate and not stored as exact values, attempts to treat them as exact in comparisons may lead to problems. They are also subject to platform or implementation dependencies. For more information, see Section B.5.5.8, “Problems with Floating-Point Values”

For maximum portability, code requiring storage of approximate numeric data values should use FLOAT or DOUBLE PRECISION with no specification of precision or number of digits.

 

也就是我们平时用的 FLOAT(M,D)  是用来让mysql去决定怎么存储的。怪不得好问题出来。

 

不适用于精度计算。但我们一般用来存储,也够了。

 

 FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

A small (single-precision) floating-point number. Permissible values are -3.402823466E+38 to -1.175494351E-380, and 1.175494351E-38 to 3.402823466E+38. These are the theoretical limits, based on the IEEE standard. The actual range might be slightly smaller depending on your hardware or operating system.

M is the total number of digits and D is the number of digits following the decimal point. If M and D are omitted, values are stored to the limits permitted by the hardware. A single-precision floating-point number is accurate to approximately 7 decimal places.

 

4字节,范围:-3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to 3.402823466E+38

最多只有7位有效小数位就占满了存储空间。

 

要得到1位或2位精确小数的话,整数不能高于 32767

即:f<32767.99

因为 2E15=32768

 所以最多只能正确处理0~32767的整数,

 

要得到3位 精确 小数的话,整数不能高于16383

即:f< 16383 .999

因为 2E14=16384 

 

 

参考:

http://blog.csdn.net/afternoone/article/details/4183556

http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html

http://blog.csdn.net/a3z2008/article/details/6675593

mysql下float类型使用一些误差详解http://www.jb51.net/article/31723.htm

 

 

分享到:
评论

相关推荐

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

    float,double类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理。这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我...

    Java与MySQL中小数保存问题解析.pptx.pptx

    MySQL数据库则提供了多种小数类型,包括浮点型(FLOAT和DOUBLE)和定点型(DECIMAL)。浮点型小数使用科学计数法存储,提供较广的数值范围,但可能牺牲精度以节省存储空间。相比之下,定点型小数如DECIMAL,其精度是...

    大厂喜欢问的面试题50道

    4、如何区分FLOAT和DOUBLE?以下是FLOAT和DOUBLE的区别:  浮点数以8位精度存储在FLOAT中,并且有四个字节。   浮点数存储在DOUBLE中,精度为18位,有八个字节。  5、区分CHAR_LENGTH和LENGTH?CHAR_LENGTH...

    优化mysql存储数据-----最基础的.pdf

    在 MySQL 中,整数包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 等,浮点数包括 FLOAT 和 DOUBLE。对于整数,Should 使用最精确的类型,即 MEDIUMINT UNSIGNED,以节省存储空间。在需要表示小数部分时,可以使用...

    mysql下float类型使用一些误差详解

    mysql中float数据类型的问题总结 对于单精度浮点数Float: 当数据范围在±131072(65536×2)以内的时候,float数据精度是正确的,但是超出这个范围的数据就不稳定,没有发现有相关的参数设置建议:将float改成...

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

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

    MySQL面试题及答案.pdf

    FLOAT 和 DOUBLE 都是浮点数类型,但是它们的精度不同。FLOAT 以 8 位精度存储浮点数, chiếm用四个字节。DOUBLE 以 18 位精度存储浮点数,占用八个字节。 7. CHAR_LENGTH 和 LENGTH 的区别 CHAR_LENGTH 是字符数...

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

    浮点数类型包括 FLOAT、DOUBLE、DECIMAL 等。这些数据类型都可以用来存储浮点数值,但它们的精度和取值范围不同。例如,FLOAT 可以存储从 0 到 3.4e38 的数,而 DOUBLE 可以存储从 0 到 1.8e308 的数。 字符串类型...

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

    其中,INTEGER 类型用于存储整数,BIGINT 类型用于存储大整数,FLOAT 类型用于存储浮点数,DOUBLE 类型用于存储双精度浮点数。 日期时间类型 在 Java 中,日期时间类型对应的是 java.sql.Date、java.sql.Time、...

    mysql与oracle数据类型对应关系.pdf

    - FLOAT:浮点数,与MySQL的FLOAT和DOUBLE PRECISION相似。 - VARCHAR2:可变长度的字符串,与MySQL的VARCHAR相同。 3. Java数据类型: - 对于数据库中的数值类型,Java通常使用`java.lang.Number`子类,如`Long...

    MySQL 数据类型介绍.docx

    其中,整数类型包括 TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,浮点数类型包括 FLOAT 和 DOUBLE,定点数类型为 DECIMAL。日期和时间类型包括 YEAR、TIME、DATE、DATETIME 和 TIMESTAMP。字符串类型包括 CHAR、...

    MySQL常见数据类型-数值型.pdf

    小数型数据在 MySQL 中有两种形式:浮点数(float 和 double)和定点数(decimal 和 DEC)。浮点数如 float 和 double 提供较大的数值范围,但精度相对较低,适合处理大范围但不要求很高精度的数值。定点数(decimal...

    mysql 教程MYSQL5.0的安装

    例如,TINYINT适合存储单字节的小整数,而FLOAT和DOUBLE用于存储浮点数,DECIMAL和NUMERIC则适用于需要精确计算的场景。 日期/时间类型包括DATE、DATETIME、TIMESTAMP、TIME和YEAR,各有不同的存储长度和使用场景。...

    MySQL数据库习题和实践答案.rar

    MySQL支持多种数据类型,如整数(INT、BIGINT)、浮点数(FLOAT、DOUBLE)、字符串(VARCHAR、TEXT)、日期和时间(DATE、TIME、DATETIME、TIMESTAMP)等。 4. **查询语句(SELECT)**: SELECT语句是SQL中最常用...

    MySQL数据库学习笔记.pdf

    浮点类型中,FLOAT和DOUBLE也可以用来表示数值,但可能会有精度损失。此外,MySQL还支持无符号和零填充的选项,以满足不同需求。 字符串类型包括CHAR、VARCHAR、TEXT等,用于存储字符数据。例如,VARCHAR可以存储可...

    MYSQL一头扎进MYSQL

    2. 数据类型:MySQL支持多种数据类型,如整数(INT、TINYINT等)、浮点数(FLOAT、DOUBLE)、字符串(VARCHAR、CHAR)、日期和时间(DATE、TIME、DATETIME)等,选择合适的数据类型可以有效节省存储空间并提高查询...

Global site tag (gtag.js) - Google Analytics