【问题标题】:PHP working with currencies and unitsPHP 处理货币和单位
【发布时间】:2016-02-03 21:32:17
【问题描述】:

我在非常简单的事情上遇到了很大的困难,在试图找到答案两天后,我需要一些帮助。

在我的产品数据库中,我使用的是货币。我想以美分存储所有产品价格。到目前为止,一切都很好,因为我也在与单位合作。我的产品包括杂货。例如,我有以下产品可供选择:

- Bottle of Coca Cola
- Can of Beer
- Pack of Milk
.. and so on

上述产品的单位通常是数字,你可以得到一瓶可乐,或者两瓶,以此类推。

除此之外,我还有鸡肉或牛排等产品。它们以盎司、磅、石头等为单位。我想存储每种产品 1 克的价格。

现在,我可以在我的数据库中添加一个名为 units 的字段,并且只需为每个产品添加一个单位。比如,对于瓶装可乐,我可以添加一个名为bottle 或简单的piece 的单位。对于鸡肉,牛排我可以说gram。或者我可以使用数值,对于瓶子,我只需使用1,对于克,一公斤可能为 1000,或磅为 500。

然后,为了执行一些计算,我可以在显示数据时对每个产品简单地执行此操作:

$total_price = $product->price * product->unit * product->amount / 100

金额代表输入的金额,例如我要两瓶可乐,金额输入2。或者,我要700克鸡肉,我直接输入700。我猜它确实有效。但这对我来说感觉不对,感觉应该有更好的方法来做到这一点。

另一个问题是,在显示每种产品的所有价格时。我当然不想以美分显示它们,而是以欧元显示,所以我只需将price per piece 除以 100,然后显示该价格。因此,例如,一瓶可乐的价格为 2 欧元,那么在我的数据库中,一瓶可乐的 price 字段为 200 (cents),在检索价格并显示价格时,我将其除以 100 以显示正确的 2欧元。

但对于鸡肉、牛排等,我做不到。例如,我首先需要计算从 1 克到 1000 克的价格,然后再将该价格除以 100 以显示正确的欧元。

因此,希望有人在这里理解我的问题,并且任何指向正确方向以帮助我找到答案的指针将不胜感激。

【问题讨论】:

标签: php numbers currency


【解决方案1】:

我不确定我是否理解您的逻辑,但听起来您可以通过使用经过深思熟虑的面向对象编程 (OOP) 来解决很多问题。从基础 Product 开始 - 并使用 WeightedProduct 和 PackagedProduct 扩展它。然后在Product 中实现您的通用逻辑,并在每个相应的扩展类(WeightedProduct 和PackagedProduct)中实现您的特定逻辑。

class Product {
    public function __construct () {}
}

class WeightedProduct extends Product {
    $unit = 'piece';
    public function __construct () {
        parent::__construct();
    }
    protected function getTotal () {
        // return the total based on WeightedProducts
    }
}

class PackagedProduct extends Product {
    $unit = 'gram';
    public function __construct () {
        parent::__construct();
    }
    protected function getTotal () {
        // return the total based on PackagedProducts
    }
}

【讨论】:

  • 我知道你要去哪里,我正在使用 laravel 所以这实际上可能确实值得考虑,因为它可能不像我想象的那么简单:)
  • 实际上非常简单 - 您的 Product 类将扩展 Illuminate\Database\Eloquent\Model - 然后您将获得 Eloquent 的所有优点,以及您自己的特定业务逻辑实现。
  • 是的,我很清楚这一点 :) 只是需要朝着正确的方向轻推,实际上现在我想起来了,也许我可以使用 getPriceAttriute 来做一些事情。
  • 接受了这一点,因为我让它按照我希望它与单独的 Calculations 对象一起工作的方式工作。谢谢你的建议:)
猜你喜欢
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2011-09-16
  • 2011-04-18
  • 1970-01-01
  • 2012-01-22
  • 2023-03-25
  • 2012-09-04
相关资源
最近更新 更多