Pythonのお勉強 Part68at TECHPythonのお勉強 Part68 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト152:デフォルトの名無しさん 22/09/28 11:25:04.93 9I9ISsCh.net 冗長な気がしますがこんな感じにしてみました 何かバグが発生しそうな気がします from decimal import Decimal ary=[1234.5,165,0.34,0.0001,0.000001,3.00001,0.1*3,123456] def f(n): s=format(n) return int(s.split("-")[1]) if "-" in s else len(s.split(".")[1].rstrip("0")) if "." in s else 0 r=1.05 for n in ary: d=f(n) c=Decimal(n)*Decimal( 153:r) rs=c.quantize(Decimal("0."+("0"*d))) print(n,c,d) print("-->",rs,"\n") 154:デフォルトの名無しさん 22/09/28 11:30:47.23 9I9ISsCh.net 連投すみません 結果です https://ideone.com/exojEw 155:デフォルトの名無しさん 22/09/28 13:38:45.48 E42G0/DqM.net 元々の桁数でroundしたいって感じなのかな 156:デフォルトの名無しさん 22/09/28 18:25:19.27 OOL0jr8Q0.net >>152 format使うの提案したけど使わないほうがよさそう、誤差がでる f(n): 負数で落ちる s=str(n).lstrip("-") c=Decimal(n*r) のところで n*r で誤差がでる c=Decimal(str(n)) * Decimal(str(r)) 負数対応四捨五入 -0.015 を四捨五入して -0.02 rs=((c > 0) - (c < 0)) * abs(c).quantize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP) -0.015 を四捨五入して -0.01のようにしたい場合 rs=c.quantize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP) 四捨五入したいのかよくわからんかった、roundingは好みのオプションでどうぞ 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch