有没有办法在Python中将数字向上舍入只有当小数部分是大于比一半? round
和math.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
有没有办法在Python中将数字向上舍入只有当小数部分是大于比一半? round
和math.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
math.ceil(x-0.5)
地图:
12.50 -> ceil(12.00) -> 12
12.49 -> ceil(11.99) -> 12
12.51 -> ceil(12.01) -> 13
这项工作太简单了,谢谢 –
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
好,我不得不做一些思考,但这应该做你想要
尝试输入5.5。 –
Python 3.x中的'round'使用'ROUND_HALF_EVEN',而不是'ROUND_HALF_DOWN'。在OP显然使用的Python 2.x中,它是'ROUND_HALF_UP'。 – jonrsharpe
它仍然是同样的问题 –
你可以做什么像什么这个:
round(X - 0.00000000001)
您需要确定有多少小数位是合适的,但请记住浮点数不准确,因此无法表示10000000000000000000.5。
我找到了答案通过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)
不过,我不知道它会与大家一起。 可能有更好的方法来说明。
你或许应该用['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
@jonrsharpe我正在尝试,因为我不知道它(新的Python)我收到错误,当我喜欢网站做的。你能否解释一下如何正确使用它。 –
*“我收到错误”* - 什么错误?我建议花十几分钟时间了解它并尝试一些东西,然后如果你仍然无法解决提供你尝试的问题的问题。 – jonrsharpe