2016-05-26 15 views
0

私は値フォーマッタPythonのフォーマット機能

def formatter(value): 
    return '{:.8f}'.format(value) 

ではなく、常に私は8つの小数点以下の桁数の最大値に戻りたい8桁までの復帰を持っています。

input     |  desired_output 
100     |   100 
100.01    |   100.01 
3.1232342341312323434 |  3.12323423 

どうすればよいですか? これは、大きな数の配列に適用するためのものです。それはdbaが設定した制限をオーバーフローさせた瞬間にSQL Serverに吸い上げられます。

おかげ

+0

'ラウンド(3.1232342341312323434、8)'固定精度の数値に渡すための浮動小数点数を丸めるために、より適しているかもしれませんが。 –

+0

親愛なるKillerSnailさん、私のソリューションはあなたの問題解決に貢献しましたか? – iulian

答えて

0

あなたはこのようにそれを行うことができます。値が中央揃えされる前記stringwidthが、ご希望の出力の幅である

'{:^<stringwidth>.8f}'.format(value).rstrip('0').rstrip('.') 

0

stringwidthが数字の文字数を超えると、文字列の周囲に空白が追加され、rstripは効果がないため、最初の解決策は機能しません。

これを機能させるには、最初に丸め(必要に応じてストリップ)してから、2番目のステップを中心にしてください。したがって、我々は持っている:

numbers = [100, 100.01, 3.1232342341312323434] 

for number in numbers: 
    rounded_number = '{:.8f}'.format(i).rstrip('0').rstrip('.') 
    centered_number = '{:^14}'.format(rounded_number) # substitute 14 with the desired width 
    print (centered_number) 

    # Or, as a one-liner 
    # print ('{:^14}'.format('{:.8f}'.format(i).rstrip('0').rstrip('.'))) 

出力:

 100  
    100.01  
    3.12323423