2013-10-26 56 views
44

我正在创造乐趣,但我仍然想要认真对待它,这是一个承载各种测试的网站。我希望通过这些测试来收集统计数据。存储统计数据,我需要DECIMAL,FLOAT还是DOUBLE?

某些数据将包含测试完成时间的百分比。我可以很容易地计算出测试的百分比,但是我希望返回真实的数据,因为我在测试完成时存储了各种不同的测试值。

大部分值都是在PHP浮点数中,所以我的问题是,如果我想要真正的统计数据,我应该将它们作为FLOAT,DOUBLE或DECIMAL存储在MYSQL中。

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

我问,因为一些数字可能会或可能不会浮动,如10,10.89,99.09或简单地0. 但我想真正有效的统计数据被返回。

我可以依靠浮点数学吗?

编辑

我知道这是一个通用的问题,我道歉广泛,但对于非数学家像我这样的,还我不是MYSQL的专家,我想一个专家在这一领域的意见。

我已经完成了我的研究,但是我仍然觉得我对这件事有一个阴暗的判断。我再次道歉,如果我的问题是脱离主题或不适合本网站。

回答

57

This link做了一个很好的解释你在找什么。这里是说什么:

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

FLOAT和DOUBLE,都表示浮点数。 FLOAT用于单精度,而DOUBLE用于双精度数字。从0到23的精度导致一个4字节的单精度FLOAT列。从24到53的精度导致一个8字节的双精度DOUBLE列。 FLOAT精确到小数点后7位,DOUBLE到14。

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

因此,为了获得最准确和最精确的值,Decimal将是最佳选择。

+0

d谢谢你,它有帮助 – PEPLOVE

+6

该链接有很多不正确的信息。我不会听从它的建议。 –

+0

此外,如果用于索引或作为一个键,浮动是不受欢迎的,因为存储的值可能不同于插入的那个 –

1

Linger:您提到并引用的网站有IMO的一些不准确的信息,令我感到困惑。在文档中,我读到当你声明一个float或double时,小数点实际上不包含在数字中。所以它不是字符串中的字符数,而是所有的数字。

比较文档: “DOUBLE PRECISION(M,D)..这里,”(M,D)“意思是总共可以存储多达M位数的值,其中D位可以位于。小数点例如,定义为FLOAT(7,4)的柱将看起来像-999.9999显示时” http://dev.mysql.com/doc/refman/5.1/en/floating-point-types.html

同样在误导的命名法 - ACC到文档:M是‘精确’和d是“规模',而网站则需要'精确'的'缩放'。

认为这将是有用的情况下像我一样试图得到一张照片。 纠正我,如果我错了,希望我还没有读过一些过时的文档:)

4

简单地说,Float和double不像小数那么精确。货币相关号码输入(货币和工资)建议使用十进制。 需要指出的另一点是:不要使用“=”,“<>”比较浮点数,因为浮点数不精确。

3

除非您存储十进制数据(即货币),否则应该使用标准浮点类型(FLOAT或DOUBLE)。 DECIMAL是一个固定点类型,所以在计算诸如SUM之类的东西时可能会溢出,并且对于LOG10来说可能会不可靠。

关于二进制浮点类型没有什么“不太精确”,事实上,它们会更准确(更快),以满足您的需求。与DOUBLE一起去。

1

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

例如:salary DECIMAL(8,2),8是总位数,2是小数位数。 salary将在-999999.99999999.99


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

示例:percentage FLOAT(5,2),与小数点类型相同,5是总数字,2是小数位数。 percentage将存储-999.99999.99之间的值。

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

  • 1/3.0 = 0.3333333...值将被存储为0.33(2个小数位)
  • 值等33.009将被存储为33.01(四舍五入至2位小数)
相关问题