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

时间:2010-01-29 10:42:07

标签: mysql database

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

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

4 个答案:

答案 0 :(得分:14)

有趣的问题。

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

对我而言,选择将在intdecimal(18,4)之间。

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

从编程的角度来看,我总是倾向于使用decimal来代价(或者在支持它的RDBMS中使用money)。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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