货币

In many experiments, participants play for currency: either real money, or points. oTree supports both; you can switch from points to real money by setting USE_POINTS = False in your settings.

You can write cu(42) to represent “42 currency units”. It works just like a number (e.g. cu(0.1) + cu(0.2) == cu(0.3)). The advantage is that when it’s displayed to users, it will automatically be formatted as $0.30 or 0,30 , etc., depending on your REAL_WORLD_CURRENCY_CODE and LANGUAGE_CODE settings.

注解

cu() is new in oTree 5. Previously, c() was used to denote currencies. Code that already uses c() will continue to work. More info here.

使用 CurrencyField 在数据库中存储货币。例如:

class Player(BasePlayer):
    random_bonus = models.CurrencyField()

要创建货币值的列表,使用 currency_range:

currency_range(cu(0), cu(0.10), cu(0.02))
# this gives:
# [$0.00, $0.02, $0.04, $0.06, $0.08, $0.10]

In templates, instead of using the cu() function, you should use the |cu filter. For example, {{ 20|cu }} displays as 20 points.

收益

每位玩家都有一个 payoff 字段。如果你的玩家获得了钱,你应当将其存在此字段中。 participant.payoff 自动存储了所有子会话的收益之和。你可以直接修改 participant.payoff ,例如将最终收益四舍五入变为整数。

在实验结束时,参与人的总收益可以通过 participant.payoff_plus_participation_fee() 获取;这是通过将 participant.payoff 转换为真实世界的货币(如果 USE_POINTSTrue),再加上 session.config['participation_fee'] 计算得来的。

点数(即“实验货币”)

If you set USE_POINTS = True, then currency amounts will be points instead of dollars/euros/etc. For example, cu(10) is displayed as 10 points (or 10 puntos, etc.)

你可以通过在你的session config中增加一个 real_world_currency_per_point 条目来决定到实际货币的转化率。

将点数转换为现实世界货币

你可以通过 .to_real_world_currency() 方法来将点数转换为钱。例如:

cu(10).to_real_world_currency(session)

session 是必须的,因为不同的会话会有不同的转换率)。

小数点数位

钱数使用小数点后两位展示。

从另一方面说,点数都是整数。这意味着数值会被四舍五入为整数,如 10 除以 33 。所以,我们推荐使用足够大数量级的点数,这样就不用担心舍入的错误。举例来说,将某个游戏的捐赠设为1000点,而不是100.