これはフォーマットの問題ではありません。
私は少し学習/演習を行っており、Python で「チップ計算機」を作成することにしました。浮動小数点数などを使用して、特定の数値で丸め誤差が発生する可能性があることを十分に認識しています。また、可能な限りペニー/整数のみを処理する必要があることも知っています。
パーセンテージに基づいて合計 (米ドル) を計算する際に、丸めを適切に回避するにはどうすればよいですか?
理想的には、percentage
andを取りsubtotal
、「チップ」の合計 (パーセンテージに基づく) と新しいチケットの合計を返す関数が必要です。私の電卓で。
現在、私は次のようなものを持っています:
import decimal
def get_tip(percentage, pennies_sub_total):
""""
param percentage: I suspect this should be int() or decimal.Decimal. I'm not aware of a condition that would make it matter either way. You?
param pennies_sub_total = int()
"""
percentage = decimal.Decimal(percentage)
pennies_sub_total = decimal.Decimal(pennies_sub_total) # Unnecessary use of Decimal?
tip = (pennies_sub_total * percentage) / 100
total = (pennies_sub_total + tip)
return {'tip': tip, 'total': total}
...うまくいくようですが、厳密にテストする方法がわかりません-コードレビューのためにここに来ました。私は明らかなことを見落としていますか?自信を持てる方法でこれを行いましたか?
アップデート
回答の 1 つ ( https://stackoverflow.com/a/18751401/26196 )で提起された質問を考えると、それが役立つ場合は、それらに対処しようとします。
- パーセンテージの種類は何ですか?
- pennies_sub_total の型は何ですか? (編集-これはintであると言及しました)
- 割り当て後のパーセンテージは、渡されたときと同じ型になりますか。
- Decimal、int、float、str として入ってくるものを処理する予定はありますか?
- 次に、回答する質問、チップの種類と合計があります。「式」の 100 は int になります。チップの種類は何になりますか?
- 指摘したように、12.57 の 15% に対して 1.8855 が必要な結果であるかどうかも判断する必要があります。
int
またはdecimal.Decimal
。あの二人に関係あるのかわからない…?int
、しかし、その質問はすでに解決されています。- 多分?返されていません。スコープを台無しにしている場合は、お知らせください。これは、この関数の「スコープ」外の変数を変更することを意図したものではありません。
- 1 & 2 を参照してください。
tip
decimal.Decimal
おそらく、または「ペニー」の整数として返されるはずです。既存のコード例では、あいまいに float のままにしていたと思います。この特定の行/割り当ては、「実際の」作業が行われる場所であるため、回答を提供するための特定の場所です。- 私の質問は、ペニーよりも小さいものは無視されるべきであることをかなり明確にしていると思いました. 「1.8855」は、「小計 + ヒント」部分を処理する数学が切り上げ/切り捨てを行わず、単純にペニーを合計する限り、良い結果です。私が正しくやっていると確信するために。