PHP 使用货币和单位
PHP working with currencies and units
我在做一些非常简单的事情时遇到了很大的困难,在尝试了两天找到答案后,我需要一些帮助。
在我的产品数据库中,我使用的是货币。我想以美分存储所有产品价格。到目前为止一切都很好,因为我也在使用单元。我的产品包括杂货。因此,例如,我可以 select 来自以下产品:
- 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 以显示正确的欧元。
所以,希望有人能理解我的问题,如果能提供正确方向的帮助我找到答案,我们将不胜感激。
不确定我是否理解您的逻辑,但听起来您可以通过使用深思熟虑的面向对象编程 (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
}
}
我在做一些非常简单的事情时遇到了很大的困难,在尝试了两天找到答案后,我需要一些帮助。
在我的产品数据库中,我使用的是货币。我想以美分存储所有产品价格。到目前为止一切都很好,因为我也在使用单元。我的产品包括杂货。因此,例如,我可以 select 来自以下产品:
- 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 以显示正确的欧元。
所以,希望有人能理解我的问题,如果能提供正确方向的帮助我找到答案,我们将不胜感激。
不确定我是否理解您的逻辑,但听起来您可以通过使用深思熟虑的面向对象编程 (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
}
}