【问题标题】:Storing price in PHP. What is better double or string?以 PHP 存储价格。什么是更好的双或字符串?
【发布时间】:2011-03-28 02:46:04
【问题描述】:

我一直在为我的应用程序制作“产品对象”并且我一直在设置属性,当我突然进入价格属性并偶然发现它时,我质疑选择哪种类型更好?我知道,对于 PHP 来说这无关紧要,但对于 MySQL 来说它确实如此。
有什么建议吗?

【问题讨论】:

    标签: php mysql string oop double


    【解决方案1】:

    实数类型更适合数字,因为您可以与它们进行适当的比较(例如,价格 677),然后除以 100,然后再将数字呈现给用户。这样就可以得到数据库中的数字运算,得到精度(假设 1 美分的精度就足够了)。

    【讨论】:

    • 数据库选择也有问题吗?
    【解决方案2】:

    都不合适。

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

    【讨论】:

      【解决方案3】:

      this SO question 中有对此问题的“最佳实践”解决方案的详细说明。使用整数也是一种可接受的选择。无论如何,最好在整个应用程序中使用相同的解决方案,以便于比较和算术。

      请记住,在将数据呈现给用户之前,您始终可以使用number_format() 或其他方式更改数据的外观。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            我个人更喜欢将整数存储为分值,650 而不是 6.50。 易于排序,没有舍入问题,并且易于以任何格式显示给您的用户。

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2014-04-12
                • 1970-01-01
                • 1970-01-01
                • 2011-03-03
                • 2011-08-28
                • 1970-01-01
                • 2020-07-21
                相关资源
                最近更新 更多