3

我正在尝试将来自 cmath 的除法函数的数字四舍五入为“整数”,由于程序的性质,结果通常为负数。

示例代码:

strength = input("Input Strength Stat: ")
str_mod = round(strength/2)

但是,这样做的结果是,由于 python 中的一个奇怪之处,它总是返回更接近零而不是更远,如果str_mod在四舍五入之前最终达到 -1.5 (根据需要导致 -1 而不是 -2)

由于我正在尝试为自定义 Pen and Paper RPG 系统创建一个自动派生的 stat calc 脚本,因此这不是所需的行为。我希望脚本在四舍五入时返回 -1.5、-2.0。我需要能够做到这一点,同时仍然以类似的方式将正数四舍五入。

4

4 回答 4

4

这是因为您从strength/2

尝试strength/2.0

这对 python 来说并不奇怪,而只是大多数语言如何为数字转换类型

5/2 = 2

5/2.0 = 2.5

于 2012-07-13T22:01:15.287 回答
3

您可以以安全的方式执行此操作:

strength = float(raw_input("Input Strength Stat:"))
str_mod = round(strength/2)

在这种情况下,由于强度保证为浮点数,因此您可以安全地除以 2 而不必担心截断或division__future__. 作为奖励,您还消除了游戏中的巨大安全责任。

使用输入,用户可能会对您的系统造成严重损害:

RPG console> Input Strength Stat: __import__('os').system('rm -r ~')
                                 #^ User input (don't try this!)
于 2012-07-13T22:08:22.380 回答
0

您可能需要使用Decimal来获得与 RPG 相同的舍入。使用 Decimal,您可以将舍入模式设置为向上、向下、半向上等。

于 2012-07-13T22:03:42.567 回答
0

或者,您可以尝试:

from __future__ import division

为了使用py3k除法。(例如结果总是浮动的)

于 2012-07-13T22:05:24.923 回答