2017-05-14 67 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) 

不過,我不知道它會與大家一起。 可能有更好的方法來說明。