问题 我应该将字段PRICE存储为数据库中的int或float吗?


在之前的项目中,我注意到price字段存储为int,而不是float。这是通过将实际值乘以100来完成的,原因是为了避免遇到浮点问题。

这是一个我应该遵循的好习惯还是不必要,只会使数据不透明?


3542
2018-01-29 10:42


起源



答案:


有趣的问题。

我实际上不会在mysql环境中选择float。使用该数据类型精确过去的问题太多了。

对我而言,选择将介于两者之间 int 和 decimal(18,4)

我已经看到用于表示浮点值的真实世界示例整数。 JD Edwards数据表的内部都是这样做的。数量通常除以10000.虽然我确信它在表内更快更小,但这只意味着如果我们想要对它们做任何事情,特别是除法,我们总是必须将整数写入十进制值。

从编程的角度来看,我总是喜欢与之合作 decimal 价格(或 money 在支持它的RDBMS中)。


13
2018-01-29 10:52



我决定保持简单,只需要小数点 - Mark Basmayor


答案:


有趣的问题。

我实际上不会在mysql环境中选择float。使用该数据类型精确过去的问题太多了。

对我而言,选择将介于两者之间 int 和 decimal(18,4)

我已经看到用于表示浮点值的真实世界示例整数。 JD Edwards数据表的内部都是这样做的。数量通常除以10000.虽然我确信它在表内更快更小,但这只意味着如果我们想要对它们做任何事情,特别是除法,我们总是必须将整数写入十进制值。

从编程的角度来看,我总是喜欢与之合作 decimal 价格(或 money 在支持它的RDBMS中)。


13
2018-01-29 10:52



我决定保持简单,只需要小数点 - Mark Basmayor


如果要乘以大数字,浮点错误可能会导致问题。一般而言,在可能的情况下,永远不应使用浮点数进行财务计算。


2
2018-01-29 10:49





我认为 Decimal 对这种用途有好处。


1
2018-01-29 10:49





虽然它可以节省您与浮动相关的问题,但将价格保存为整数可能会导致问题,您最终会向客户收取100倍的价格。它也可能使其他程序员感到困惑。

我已经看到这两种解决方案在中型电子商务网站上成功使用,但我更倾向于使用浮动。


0
2018-01-29 10:48