アカウントと代金引換の取引を処理するシステムを持っています。クライアントが代金引換で支払う場合、セントを切り上げるか切り捨てる必要があります。
Eg.
Total = 64.42 - rounds to: 64.40
Total = 64.57 - rounds to 64.60
私はこれをPythonで行う最良の方法を見つけようとしており、データベースの10進数フィールドにも差を保存しています。
ジャンゴを使っています。10 進数の ROUND_05UP 部分を使用しようとしていましたが、その方法がわかりません。それを表示するカスタム フィルターを作成しましたが、機能していません。
@register.filter
def currency(value, arg='en_US', symbol=True):
saved = '.'.join([x for x in locale.getlocale() if x]) or (None, None)
given = arg and ('.' in arg and str(arg) or str(arg) + '.UTF-8')
# Workaround for Python bug 1699853 and other possibly related bugs.
if '.' in saved and saved.split('.')[1].lower() in ('utf', 'utf8'):
saved = saved.split('.')[0] + '.UTF-8'
if saved == (None, None) and given == '':
given = 'en_US.UTF-8'
try:
locale.setlocale(locale.LC_ALL, given)
return locale.currency(value or 0, symbol, True)
except (TypeError, locale.Error):
return ''
finally:
locale.setlocale(locale.LC_ALL, saved)
@register.filter
def currency_cash(value):
value = decimal.Decimal(value)
return currency(value.quantize(Decimal(10) ** -2, rounding=decimal.ROUND_05UP))
これを行う関数を書いた人はいますか?
更新:この理由は、オーストラリアでは 5 セント未満の硬貨がないからです。したがって、45.55 は 45.55 のままです。
乾杯、ベン