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