在之前的项目中,我注意到price字段存储为int,而不是float。这是通过将实际值乘以100来完成的,原因是为了避免遇到浮点问题。
这是一个很好的做法,我应该遵循还是不必要,只会使数据不透明?
答案 0 :(得分:14)
有趣的问题。
我实际上不会在mysql环境中选择float。过去使用该数据类型时出现的问题太多了。
对我而言,选择将在int
和decimal(18,4)
之间。
我已经看到用于表示浮点值的真实世界示例整数。 JD Edwards数据表的内部都是这样做的。数量通常除以10000.虽然我确信它在表内更快更小,但这只意味着如果我们想对它们做任何事情,特别是除法,我们总是必须将整数加入十进制值。 / p>
从编程的角度来看,我总是倾向于使用decimal
来代价(或者在支持它的RDBMS中使用money
)。
答案 1 :(得分:2)
如果要乘以大数字,浮点错误可能会导致问题。一般而言,在可能的情况下,永远不应使用浮点数进行财务计算。
答案 2 :(得分:1)
我认为Decimal
对这种用途有好处。
答案 3 :(得分:0)
虽然它可以节省与浮动相关的问题,但将价格保存为整数可能会导致最终向客户收取100倍价格的问题。它也可能使其他程序员感到困惑。
我已经看到这两种解决方案在中型电子商务网站上成功使用,但我倾向于使用浮动广告。