Mysql 存储统计数据时,我需要十进制、浮点还是双精度?

Mysql 存储统计数据时,我需要十进制、浮点还是双精度?,mysql,floating-point,double,decimal,Mysql,Floating Point,Double,Decimal,我是为了好玩而创建的,但我仍然想认真对待它,一个承载各种测试的网站。通过这些测试,我希望收集统计数据 一些数据将包括测试完成时间的百分比。我可以很容易地计算测试的百分比,但我希望在存储关于完成测试的各种不同值时返回真实数据 大多数值都是PHP浮点值,所以我的问题是,如果我想要真实的统计数据,我应该在MYSQL中以浮点、双精度或十进制的形式存储它们 我想利用MYSQL的函数,如AVG()和LOG10()以及TRUNCATE()。为了让MYSQL根据我插入的值返回真实数据,我应该使用什么作为数据库列

我是为了好玩而创建的,但我仍然想认真对待它,一个承载各种测试的网站。通过这些测试,我希望收集统计数据

一些数据将包括测试完成时间的百分比。我可以很容易地计算测试的百分比,但我希望在存储关于完成测试的各种不同值时返回真实数据

大多数值都是PHP浮点值,所以我的问题是,如果我想要真实的统计数据,我应该在MYSQL中以浮点、双精度或十进制的形式存储它们

我想利用MYSQL的函数,如
AVG()
LOG10()
以及
TRUNCATE()
。为了让MYSQL根据我插入的值返回真实数据,我应该使用什么作为数据库列选项

我这样问是因为有些数字可能是浮点数,也可能不是浮点数,比如,10,10.89,99.09,或者仅仅是0。 但我希望返回真实有效的统计数据

我可以依靠浮点数学来解决这个问题吗

编辑

我知道这是一个一般性的问题,我对此深表歉意,但对于像我这样的非数学家,我也不是MYSQL专家,我想听听这个领域专家的意见

我已经做了研究,但我仍然觉得我对这件事的判断模糊不清。如果我的问题离题或不适合本网站,我再次表示歉意。

很好地解释了您要找的内容。下面是他所说的:

所有这三种类型都可以通过以下参数(大小,d)指定。其中size是字符串的总大小,d表示精度。例如,要存储像1234.567这样的数字,您将数据类型设置为DOUBLE(7,3),其中7是总位数,3是小数点后的位数

FLOAT和DOUBLE都表示浮点数。浮点表示单精度,而双精度表示双精度数字。0到23之间的精度将产生一个4字节的单精度浮点列。从24到53的精度将产生一个8字节的双精度双列。浮点数精确到小数点后7位左右,加倍精确到14位

Decimal的声明和功能类似于Double。但是浮点值和十进制(数值)值之间有一个很大的区别。我们使用DECIMAL数据类型来存储精确的数值,在这里我们不需要精确,而是需要精确的数值。十进制类型最多可存储65位数字,小数点后30位


所以,对于最准确和精确的值,十进制是最好的选择。玲儿:你提到和引用的网站有一些不准确的信息,让我感到困惑。在文档中我读到,当你声明浮点或双精度时,小数点实际上不包括在数字中。因此,它不是字符串中的字符数,而是使用的所有数字

比较文档: “双精度(M,D)…此处,”(M,D)“表示可存储的数值最多为M位,其中D位可能在小数点后。例如,定义为FLOAT(7,4)的列在显示时看起来像-999.9999”

此外,误导性术语-根据文件:M为“精度”,D为“刻度”,而网站采用“刻度”表示“精度”

我想如果像我这样的人想拍一张照片的话,这会很有用。
如果我错了,请纠正我,希望我没有读过一些过时的文档:)

简单地说,Float和double不如decimal精确。对于与金钱相关的数字输入,建议使用十进制。(货币和工资)。
需要指出的另一点是:不要使用“=”和“”来比较浮点数,因为浮点数不精确

除非存储十进制数据(即货币),否则应使用标准浮点类型(浮点或双精度)。DECIMAL是一种定点类型,因此在计算SUM之类的东西时可能会溢出,对于LOG10来说,这将是非常不准确的


二进制浮点类型没有“不精确”的地方,事实上,它们会更精确(更快)地满足您的需要。使用双精度。

十进制:定点类型(精确值)。当你像金钱一样关心精确性时,就使用它

示例:
工资小数点(8,2)
,8是总位数,2是小数位数<代码>薪资将在
-9999999
9999999


浮点,双精度:浮点类型(近似值)。Float使用4个字节表示值,Double使用8个字节表示值

示例:
百分比浮动(5,2)
,与类型decimal相同,5为总位数,2为小数位数<代码>百分比将存储介于
-999.99
999.99
之间的值

请注意,它们是近似值,在这种情况下:

  • 类似
    1/3.0=0.3333333…
    的值将存储为
    0.33
    (小数点后2位)
  • 33.009
    这样的值将存储为
    33.01
    (四舍五入到小数点后2位)

Float和Double是浮点数据类型,这意味着它们存储的数字只能精确到特定的位数。 例如,对于具有浮点型列的表,如果存储
7.6543219
,它将存储为
7.65432
。 类似地,
Double
数据类型近似值,但其精度高于
Float

创建列为
Decimal
数据类型的表时,指定要存储的总位数和小数点后的位数,如果存储的位数在指定的范围内,则将准确存储

当你想要的时候