我正在处理的应用程序需要存储格式X pounds, y.y ounces
的权重。数据库是MySQL,但我认为这与数据库无关。
我可以想到三种方法:
我认为#1不是一个好主意,因为十进制磅将产生任意精度的数字,这需要存储为浮点数,这可能导致浮点数固有的不准确性。
是否有令人信服的理由选择#2而非#3或反之亦然?
答案 0 :(得分:7)
我很想将它存储在公制单位中,因为它们往往是简单的小数,而不是像磅和盎司这样的复杂值。这样,你可以存储一个值(即103.25千克)而不是磅 - 盎司当量,并且更容易执行转换。
这是我过去处理过的事情。我在职业摔跤和混合武术(MMA)网站上做了很多工作,需要记录战士的身高和体重。它们往往显示为英尺和英寸以及磅和盎司,但我仍然将这些值存储在它们的厘米和千克当量中,然后在网站上显示时进行转换。
答案 1 :(得分:0)
首先,我不知道浮点数是如何不准确的 - 谢天谢地,搜索后者帮助我理解:Floating Point Inaccuracy Examples
我完全同意@eggyal - 将数据保存在一个列中的单一格式中。这允许您将它暴露给应用程序并让应用程序处理它的呈现 - 无论是lbs / oz,四舍五入的lbs,等等。
数据库应保留原始数据,而表示层指示布局。
答案 2 :(得分:0)
您可以为权重列使用十进制数据类型。
decimal('weight', 8, 2); // precision = 8, scale = 2
Storage size:
Precision 1-9 5 Bytes
Precision 10-19 9 Bytes
Precision 20-28 13 Bytes
Precision 29-38 17 Bytes