将正/负数舍入到最接近的“整数”

时间:2012-07-13 21:58:46

标签: python integer python-2.x cmath

我正在尝试将源自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 个答案:

答案 0 :(得分:4)

这是因为你从strength/2

得到一个(截断的)int

尝试strength/2.0

这不是python的奇怪之处,而只是大多数语言如何为数字构建类型

5/2 = 2

5 / 2.0 = 2.5

答案 1 :(得分: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!)

答案 2 :(得分:0)

您可能需要使用Decimal来获得与RPG相同的舍入。使用十进制,您可以将舍入模式设置为up, down, half up, etc.

答案 3 :(得分:0)

或者,您可以尝试:

from __future__ import division

为了使用py3k分区。 (例如,结果将始终为浮点数)