货币

在许多实验中,参与者为了某种货币进行游戏:可能是真实的钱,也可能是点数。oTree两种都支持;你可以通过在 settings.py 中设置 USE_POINTS = False 将点数改为真实的钱。

你可以使用 cu(42) 来表示“42单位货币”。它就像一个数字一样(例如 cu(0.1) + cu(0.2) == cu(0.3))。好处是当展示给用户时,它会自动格式化为 $0.300,30 ,等等。这取决于你的 REAL_WORLD_CURRENCY_CODELANGUAGE_CODE 设置。

注解

cu() 在oTree 5中新引入。之前使用 c() 来表示货币。使用 c() 的代码会继续正常工作。更多信息在 这里

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

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

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

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

在模板中,你应当使用 |cu 过滤器而不是 cu() 函数。举例来说, {{ 20|cu }} 会显示为 20 points

收益

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

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

点数(即“实验货币”)

你可以设置 USE_POINTS = True,那么货币值就会使用点数而不是美元/欧元/等等。举例来说, cu(10) 会被显示为 10 points (或者 10 puntos,诸如此类)

你可以通过在你的session config中增加一个 real_world_currency_per_point 条目来决定与实际货币的兑换比例。

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

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

cu(10).to_real_world_currency(session)

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

小数位数

钱数使用两位小数展示。

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