我一直在为我的应用制作“产品对象”并且我一直在设置属性,突然我得到了价格属性并偶然发现了问题哪种类型更好选择?我明白,对于PHP而言,这并不重要,但我们可以说它适用于MySQL 有什么建议吗?
答案 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项目。完全披露:我实际上没有仔细研究过这个项目,但看起来它会给你一些关于处理这些事情的好主意。