1

我有一个国际应用程序可以处理人的长度和体重,并将它们存储在数据库中。我想知道如何处理这个问题,以防用户可以在应用程序中使用厘米/英寸之间切换。

我一直在考虑在数据库中始终使用厘米,如果用户选择使用英寸,则转换为英寸。但当然,如果用户输入以英寸为单位的长度,并将其转换为厘米并存储为厘米,则该值可能会由于舍入误差而略有变化。

您将如何处理这种情况?

谢谢, L

4

7 回答 7

2

除了可用的信息之外,您的问题还有很多需要考虑的地方。在决定如何存储和转换信息之前,您必须知道您可以接受的错误是什么。例如,如果您正在计算轨迹以用另一枚导弹拦截来袭导弹,则需要非常精确的精度才能成功。如果这是一个医疗应用并用于精确控制药物配方,那么精确可能比简单计算 BMI 更重要。

简而言之,选择一个标准,无论是公制还是其他标准,并坚持使用适合您的存储类型的标准。根据所需的精度,选择能够为您提供所需精度的最小测量系统单位。不同测量系统的所有单位显示都将从该基本测量转换而来。

并尽量不要过度设计解决方案。如果测量到小数点后 52 位并不重要,那么您就是在浪费精力并为这种情况注入了不必要的复杂性。

于 2011-05-18T15:48:08.150 回答
1

因此,如果从英寸转换为厘米,或者从厘米转换为英寸,则会出现舍入误差。无论您在数据库中存储什么,问题都是一样的。

您可以在数据库中存储的值不是以厘米为单位,而是以毫米为单位。所以我认为这个单位有多小,所以它会更准确,即使在转换的情况下也是如此。

于 2011-05-18T15:44:01.917 回答
1

我个人会使用两种方法之一。

  1. 始终以相同的计量单位存储
  2. 将度量单位存储在单独的字段中,以便您知道单位是厘米还是英寸。

我更喜欢第一种方法,因为它更容易处理。

于 2011-05-18T15:38:30.973 回答
1

如果同一个用户应该能够在前端进行切换,那么您绝对应该以您决定的单位存储一个表示值的字段,因为无论如何都会发生舍入错误。

如果您有一组用户只处理英寸,另一组只处理厘米,并且这些组中的每一个都有自己的数据库或至少“自己的值”,那么决定两个字段,值/单位(例如,相同的软件,不同的客户安装在不同的国家)

我会存储表示例如微米的非浮点值(使用无符号 32 位,您可以表示从 4.2 公里到 0.001 毫米的所有值)。

于 2011-05-18T15:54:20.897 回答
0

Depending on what you're going to be doing with those values (whether you need to do much aggregation at the DB layer, etc), the best way to ensure there is no cumulative rounding error is to store in the original unit of measure with that unit of measure (id) in a separate column, and have a separate conversion table that you use for on-the-fly calculations when comparing, aggragating, etc.

This will not be super-efficient or convenient, however: you will always have to join to a conversion table before doing any work with the values stored.

于 2011-05-18T15:40:26.923 回答
0

除非您存储转换率,否则不确定为什么需要数据库

无法识别公制或英制,因为它们只是数字

您的舍入误差将根据您希望显示的准确度发生......

于 2011-05-18T15:36:24.987 回答
0

我们可以很简单地完成任务。我们只有将英寸转换为厘米的系数,以及我们没有保存到数据库中的所有计算和结果。我们只能将比率上的数字相乘或除以得到结果。所以如果你有厘米需要乘以比率并得到结果。您可以通过我在 2 分钟内找到的示例了解它是如何工作的:http: //inchpro.com/metric-system/convert-inches-to-centimeters 我想您知道将所有值存储在数据库中会占用很多空间的空间。

于 2016-08-12T21:32:47.860 回答