[過去ログ] Pythonのお勉強 Part68 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
148: 2022/09/28(水)09:19 ID:9I9ISsCh(1/6) AAS
>>145-147
たしかに
0.30000000000000004に対して17得られたのは正解だと思いますが
0.00001で1e-05になっててエラーでました
Decimalかformat使ってみようと思います
ありがとうございました
149: 2022/09/28(水)10:07 ID:9I9ISsCh(2/6) AAS
やりたかったことは
受けとった1234.56や0.12345などの固定小数点数に
0.1とかを掛けたり足したりして計算、変形したのを
受け取った固定小数点数の整数部と小数部の数を維持したまま
固定小数点か文字列で処理したかったのですが
改めてやってみるとなんか勝手に桁数が変わってしまいますね・・
1234.56で受け取った場合、1.05を掛けたとき→1296.288ではなく1296.29
0.12345で受け取った場合、1.05を掛けたとき→0.1296225ではなく0.12962
1234で受け取った場合、1.05を掛けたとき→1295.7でもいいし1296でもいいし1296.0でもいい
みたいにしたかったのですが難しい・・
150: 2022/09/28(水)10:17 ID:9I9ISsCh(3/6) AAS
from decimal import Decimal
str(Decimal(0.123456))
str(Decimal(0.123456)*Decimal(1.05))
#'0.1296288000000000015945911258'
あれ、そもそも0.123456の小数部の桁数はどうやって知るんだっけ??
てところで詰まってます・・
151: 2022/09/28(水)11:25 ID:9I9ISsCh(4/6) AAS
冗長な気がしますがこんな感じにしてみました
何かバグが発生しそうな気がします
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(r)
rs=c.quantize(Decimal("0."+("0"*d)))
print(n,c,d)
print("-->",rs,"\n")
152(1): 2022/09/28(水)11:30 ID:9I9ISsCh(5/6) AAS
連投すみません 結果です
外部リンク:ideone.com
155: 2022/09/28(水)19:37 ID:9I9ISsCh(6/6) AAS
>>154
ありがとうございます
やはり至るところで誤差が発生するのですね
四捨五入は今回の用途ではどちらでも良い感じです
せっかくなのでまとめてみました
外部リンク:ideone.com
ありがとうございました
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.031s