2016-10-16 13 views
1

2つの数字に丸めたい浮動小数点のリストがあります。私は、この目的のためにラインの下に使用:Pythonで最も近い下位浮動小数点数に丸める方法は?

item = ['41618.45110', '1.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '0.00', '41619.001202', '3468.678822'] 
print ["{0:.2f}".format(round(float(x), 2)) if re.match("^\d+(\.\d+)?$", x) else x for x in item] 

それは3468.68に丸められ3468.678822を引き起こし最寄りの上部フロートへのすべてのリストメンバーを丸め、私は、そう3468.678822がすべき最も近い下部フロートにそれらを丸めます3468.67に四捨五入してください。 0の例外があります。私は0の数字を0のままにします。

round、さらにfloatの機能を使わずに上記のコマンドを試してみましたが、結果は同じでした。私はまた試みた:

[x[:x.index('.')] if re.match("^\d+(\.\d+)?$", x) else x for x in item] 

それは私にSubstring not foundエラーを与えた。

答えて

1

あなたはそれを行うには、キャストを使用することができます。

a = '3468.678822' 

def round_2(n): 
    return ((int)(n*100)/100) 

print(round_2(float(a))) 

>>> 3468.67 
0

私はちょうど精密丸めこの種のカップルの機能を作りました。彼らがどのように動作するか興味がある場合に備えて、どのように動作するかについてのいくつかのドキュメントを追加しました。

import math 

def precCeil(num, place = 0): 
    """ 
    Rounds a number up to a given place. 

    num - number to round up 
    place - place to round up to (see notes) 
    """ 

    # example: 5.146, place is 1 

    # move the decimal point to the right or left, depending on 
    # the sign of the place 
    num = num * math.pow(10, place) # 51.46 

    # round it up normally 
    num = math.ceil(num) #52 

    # put the decimal place back where it was 
    num = num * math.pow(10, -place) #5.2 

    # return the result rounded, to avoid a weird glitch where 
    # a bunch of trailing numbers are added to the result (see notes). 
    return round(num, place) 

""" 
Notes: 
Here is how the places work: 
0 - ones place 
positive ints - to the right of the decimal point 
negative ints - to the left of the ones place 

This function works perfectly fine on Python 3.4 and 2.7, last I checked. 

If you want a version of this that rounds down, just replace the calls 
to math.ceil with calls to math.floor. 

Now, the glitch with the trailing numbers. Just have flexCeil return 
num instead of round(num, place). Then test it with flexCeil(12345.12345, 2). 
You get 12345.130000000001. 

Interestingly enough, this glitch doesnt happen when you change the 
function to round down, instead. 
""" 
関連する問題