2017-05-14 48 views
1

有没有办法在Python中将数字向上舍入只有当小数部分是大于比一半? roundmath.ceil将做到这一点:实现半舍弃

round(X.5) => X+1 
math.ceil(X.5) => X+1 

不过,我想这样的:

x.500...000001 => x+1 
x.500...000000 => x 

如何做到这一点?

我有2.7.13蟒蛇64

+1

你或许应该用['decimal'(https://docs.python.org/2/library/decimal.html),在这里可以设置这样做[context]中的ROUND_HALF_DOWN(https://docs.python.org/2/library/decimal.html#decimal.Context)。这也可以让你更精确的控制; '.5'中的浮点数可能不是您期望的值。 – jonrsharpe

+0

@jonrsharpe我正在尝试,因为我不知道它(新的Python)我收到错误,当我喜欢网站做的。你能否解释一下如何正确使用它。 –

+0

*“我收到错误”* - 什么错误?我建议花十几分钟时间了解它并尝试一些东西,然后如果你仍然无法解决提供你尝试的问题的问题。 – jonrsharpe

回答

1
math.ceil(x-0.5) 

地图:

12.50 -> ceil(12.00) -> 12 
12.49 -> ceil(11.99) -> 12 
12.51 -> ceil(12.01) -> 13 
+0

这项工作太简单了,谢谢 –

-1
import math 
while True: 
    num=input("num: ") 
    num=float(num) 
    new_n=round(num,0) 
    if (float(new_n)-0.5)==num: 
     print(num-0.5) 
    else: 
     print(new_n) 

输出:

num: 4.5 
4.0 
num: 5.5 
5.0 
num: 6.6 
7.0 
num: 5.5001 
6.0 

好,我不得不做一些思考,但这应该做你想要

+1

尝试输入5.5。 –

+0

Python 3.x中的'round'使用'ROUND_HALF_EVEN',而不是'ROUND_HALF_DOWN'。在OP显然使用的Python 2.x中,它是'ROUND_HALF_UP'。 – jonrsharpe

+0

它仍然是同样的问题 –

0

你可以做什么像什么这个:

round(X - 0.00000000001) 

您需要确定有多少小数位是合适的,但请记住浮点数不准确,因此无法表示10000000000000000000.5。

0

我找到了答案通过jonrsharpe作为建议使用context 这是他们的方式,我用它:

from decimal import * 
x =5.500000000000001 # it is the number wanted to round, however only takes 15 number after decimal for me 
ctx= Context(prec=1, rounding=ROUND_HALF_DOWN) 
y = ctx.create_decimal(x) 

不过,我不知道它会与大家一起。 可能有更好的方法来说明。