用PHP存储价格。什么是更好的双重或字符串?

时间:2010-08-10 22:53:00

标签: php mysql string oop double

我一直在为我的应用制作“产品对象”并且我一直在设置属性,突然我得到了价格属性并偶然发现了问题哪种类型更好选择?我明白,对于PHP而言,这并不重要,但我们可以说它适用于MySQL 有什么建议吗?

7 个答案:

答案 0 :(得分:25)

实数类型对数字更好,因为您可以与它们进行适当的比较(例如,价格<10.0)。但是,它们确实会引入精度问题(例如3.0 = 2.9999999999)。在这种情况下最好使用原生的Decimal类型,但是缺少这种类型,我会将价格存储为整数分数(例如,6.77 => 677),然后在将数字提供给用户之前除以100。这样你就可以获得数据库中的数字操作,并获得精度(假设1美分的精度就足够了)。

答案 1 :(得分:8)

两者都不合适。

价格应存储为DECIMAL或INT,因为它们具有固定的小数点数。使用浮点数不是一个好主意,因为值会四舍五入。字符串是有问题的,因为你无法进行比较。

答案 2 :(得分:2)

this SO question中详细解释了这个问题的“最佳实践”解决方案。使用整数也是可接受的替代方案。无论如何,最好在整个应用程序中使用相同的解决方案,以便于比较和算术。

请记住,在使用number_format()或其他内容向用户呈现数据之前,您始终可以更改数据的显示方式。

答案 3 :(得分:1)

使用您提供的信息,最好只使用一个整数,因此您可以使用数值而不是字符串值进行排序和查询。 int会比浮点更好,因为它不会有奇怪的半分问题。

即,您不希望6.77大于12.54,也不想要价格为6.4312313141的东西。

答案 4 :(得分:0)

在考虑字符串或数字(int,double等)数据类型时,我总是问自己的问题是,“我会用它们做数学吗?”如果答案是肯定的,我必须假设它是在你的情况下,我使用数值。如果答案为否,我选择字符串值。

答案 5 :(得分:0)

我个人更喜欢将整数存储为分值,650而不是6.50。 易于分类,无圆角问题,易于以任何格式显示给用户。

答案 6 :(得分:0)

您可能想查看sourceforge上的Time and Money项目。完全披露:我实际上没有仔细研究过这个项目,但看起来它会给你一些关于处理这些事情的好主意。