有沒有辦法在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