当前位置: 首页 > 知识库问答 >
问题:

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

巢安澜
2023-03-14

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

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

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

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

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

我能依靠浮点数学来解决这个问题吗?

编辑

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

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

共有3个答案

司马昕
2023-03-14

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

示例:工资DECIMAL(8,2),8是总位数,2是小数位数。工资将在-999999.99999999.99的范围内

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

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

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

  • 值如1 / 3.0 = 0.3333333...将存储为0.33(小数点后2位)
  • 33.009这样的值将存储为33.01(四舍五入到小数点后2位)
裴展
2023-03-14

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

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

车明贤
2023-03-14

这个链接很好地解释了你在寻找什么。下面是他所说的:

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

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

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

因此,对于最精确的值,十进制将是最好的选择。

 类似资料:
  • 问题内容: 我创建游戏的目的很有趣,但是我仍然想认真对待它,它是一个托管各种测试的网站。通过这些测试,我希望收集统计数据。 其中一些数据将包括测试定时完成的百分比。我可以轻松计算出测试的百分比,但是当我存储有关测试完成的各种不同值时,我希望返回真实数据。 大多数值都是PHP浮点数,所以我的问题是,如果我想要真实的统计数据,应该将它们以FLOAT,DOUBLE或DECIMAL的形式存储在MYSQL中

  • 本文向大家介绍C#浮点,双精度,十进制,包括了C#浮点,双精度,十进制的使用技巧和注意事项,需要的朋友参考一下 示例 浮动 float是.NET数据类型的别名System.Single。它允许存储IEEE 754单精度浮点数。存在此数据类型mscorlib.dll,每个C#项目在创建它们时都会隐式引用该数据类型。 大致范围:-3.4×10 38至3.4×10 38 十进制精度:6-9个有效数字 记

  • 问题内容: 我用双精度(小数)出现了这个问题。 当double = 1.234567时,我使用 所以结果是1.234 但是当我的倍数是10时 ,结果将是10,000, 我希望这是10 他们是否可以说他只在“ usefull”时才显示小数? 我看到了一些有关此的文章,但是那是php或c#,找不到关于android / java的东西(也许我看起来不太好)。 希望你们能帮我这个忙。 编辑,现在我使用类

  • 在浮点数字类型的C#参考中,可以看到 的精度为6到9位 的精度为15到17位 的精度为28到29位 在这种情况下,意味着什么,尤其是,如何成为一个范围?由于指数和尾数的位数是固定的,

  • 问题内容: 我正在尝试将以下十六进制字符串转换为“ 41630D54FFF68872”到9988776.0(float-64)。 使用单精度float-32,我可以这样做: 但这会引发:java.lang.NumberFormatException:使用上面的64位十六进制时,Infinite或NaN。 如何将十六进制转换为使用64位IEEE-754编码的双精度浮点数? 谢谢 问题答案: 您需要双

  • 在处理浮点数时,我对C#中“精度”的实际含义有些怀疑。如果逻辑性不强,而且解释太长,我提前道歉。 我知道浮点数(例如)的精度为6到9位。假设我们有下一个代码: 我在控制台里得到了确切的数字。现在,让我们使用下一个代码: 打印了一个不同的数字:,即使这个数字有9位数,这也是极限。 这是我的第一个怀疑。精度取决于数字本身还是计算机的结构? 此外,数据以位的形式存储在计算机中,在中间,我记得将数字的小数