有没有办法知道python中的内容是向上舍入还是向下舍入?

有没有办法知道python中的内容是向上舍入还是向下舍入?,python,rounding,Python,Rounding,我基本上想知道我的等式(这是一个像这样的简单等式)的结果是向上舍入还是向下舍入。 原因是我在四舍五入行后面有两个简单的语句,如下所示: if h % 2 != 0: h = h + 1 if h % 4 != 0: h = h + 2 根据四舍五入的方向,我会选择+或-运算符,因此如果结果被四舍五入并且h%2!=0则为h=h+1,如果向下舍入,则为h=h-1 round()是否提供了此类信息 还有,我的数学正确吗?(我希望结果可以除以4)假设您想知道3.9和4.4是否四舍五入。您可以这样做:

我基本上想知道我的等式(这是一个像这样的简单等式)的结果是向上舍入还是向下舍入。 原因是我在四舍五入行后面有两个简单的语句,如下所示:

if h % 2 != 0: h = h + 1
if h % 4 != 0: h = h + 2
根据四舍五入的方向,我会选择
+
-
运算符,因此如果结果被四舍五入并且
h%2!=0
则为
h=h+1
,如果向下舍入,则为
h=h-1

round()
是否提供了此类信息


还有,我的数学正确吗?(我希望结果可以除以4)

假设您想知道
3.9
4.4
是否四舍五入。您可以这样做:

if h % 2 != 0: h = h + 1
if h % 4 != 0: h = h + 2
def向下舍入(val,ndigits=None):
返回轮(val,ndigit)
然后您可以简单地调用函数来查找

>>> is_rounded_down(3.9)
False
>>> is_rounded_down(4.4)
True
默认情况下,
round()

  • >=5表示+1将添加到最终值
  • >>数学ceil(5.2) 6. >>>数学地板(5.9) 5.
尝试直接四舍五入到4:

import math

h = 53.75
rounded = math.round(h / 4) * 4

if (rounded > h):
  print("Rounded up by " + str(rounded - h))
else:
   print("Rounded down by " + str(h - rounded))

对于Python2.X整数除法返回一个整数,并且总是向下舍入

add@LM1756:~$ python
Python 2.7.13 (default, Sep 26 2018, 18:42:22)
>>> print 8/3
2
>>> print type(5/2)
<type 'int'>
add@LM1756:~$python
Python 2.7.13(默认值,2018年9月26日,18:42:22)
>>>打印8/3
2.
>>>打印类型(5/2)
对于Python3.X,整数除法返回一个浮点,因此没有舍入

add@LM1756:~$ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
>>> print(8/3)
2.6666666666666665
>>> type(8/3)
<class 'float'>
>>>
add@LM1756:~$python3
Python 3.5.3(默认,2018年9月27日,17:25:39)
>>>印刷品(8/3)
2.6666666666666665
>>>类型(8/3)
>>>

您是否控制舍入部分或访问未舍入结果?因此
h=round(x/y)
?(不,结果是一个普通的
int
float
值,没有关于其来源的内存。)
round()
不报告该信息。但是你可以将未舍入的结果与舍入的结果进行比较,看看哪个更大,这会告诉你。@schwobasegl是的,是的。@JohnGordon一开始我想了另一种方法,但不知道如何实现它。它是这样的:推迟舍入,并根据产生的浮点决定使用哪个操作符(即,如果小于5,则
-
否则
+
),然后舍入它。
math.floor()
总是舍入。是的,是的,这是一个错误,只是编辑了它。谢谢你能解释一下你的数学吗?它总是给我四的最接近倍数吗?假设你想把23四舍五入到5的倍数:
23/5.0=>4.6
,然后是数学。四舍五入(4.6)=>5
,最后是
5*5=>25
@dspr我得到了那部分,只是想知道它背后的理论。无论如何,我根据上面的代码更改了我的代码,现在我只得到1条语句,而不是2条:
if h%4!=0:h=D(h/4)。量化(D('1'),四舍五入=十进制。四舍五入半向上)*4
谢谢你的提示。那样的话,我就必须总是手动检查结果,这在我的情况下是违反直觉的。