我正在尝试将源自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。我需要能够做到这一点,同时仍然将正数向上舍入。
答案 0 :(得分:4)
这是因为你从strength/2
尝试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分区。 (例如,结果将始终为浮点数)