货币¶
在许多实验中,参与者为了某种货币进行游戏:可能是真实的钱,也可能是点数。oTree两种都支持;你可以通过在 settings.py
中设置 USE_POINTS = False
将点数改为真实的钱。
你可以使用 cu(42)
来表示“42单位货币”。它就像一个数字一样(例如 cu(0.1) + cu(0.2) == cu(0.3)
)。好处是当展示给用户时,它会自动格式化为 $0.30
或 0,30 €
,等等。这取决于你的 REAL_WORLD_CURRENCY_CODE
与 LANGUAGE_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_POINTS
为 True
),再加上 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
除以 3
是 3
。所以,我们推荐使用足够大数量级的点数,这样就不用担心舍入的错误。举例来说,将某个游戏的捐赠设为1000点,而不是100。