-------のようなビューで数値計算の値を四捨五入したい
5.5から5または549t0500および599-600(最も近いもの)
そのため、他の言語で使用していたように、djangoで丸めORフロア関数を使用したいと思います。djangoにこれに関連する関数はありますか?いくつかの関数と、これらの関数を使用するためにインポートする必要のあるライブラリを提案してください。
ありがとう。
-------のようなビューで数値計算の値を四捨五入したい
5.5から5または549t0500および599-600(最も近いもの)
そのため、他の言語で使用していたように、djangoで丸めORフロア関数を使用したいと思います。djangoにこれに関連する関数はありますか?いくつかの関数と、これらの関数を使用するためにインポートする必要のあるライブラリを提案してください。
ありがとう。
テンプレートや他の場所でこれを行おうとしているのかどうかはわかりません。
テンプレートでは、floatformat
フィルターを使用できます。
それ以外の場合はPythonだけなので、通常のPython丸め関数を使用できます。
フロートを操作するときは、 round、math.ceil、 math.floorを使用できます。
decimal.Decimalの場合、丸めを指定できる量子化メソッドを使用できます。
value = decimal.Decimal('0.5')
value.quantize(decimal.Decimal('1'), decimal.ROUND_UP)
value.quantize(decimal.Decimal('1'), decimal.ROUND_DOWN)
value.quantize(decimal.Decimal('1'), decimal.ROUND_HALF_UP)
...
丸め方法のリストについては、decimal.Contextを参照してください。
PythonはデフォルトでROUND_HALF_EVENを使用することに注意してください。これは統計には最適ですが、財務計算には非常に扱いにくいものです。金額をセンチに丸める一般的な方法は、次のコードです。
amount = decimal.Decimal('0.15234')
CENTI = decimal.Decimal('0.01')
value.quantize(CENTI, decimal.ROUND_HALF_UP)
decimal
あなたの見解で使用する:
>>> import decimal
>>> numbers = ['5.5','499','1','0.5']
>>> for i in numbers:
... the_number = int(decimal.Decimal(i))
... if the_number / 10:
... the_number = the_number + 10 - (the_number % 10)
... print the_number
...
5
500
1
0
フロートをフォーマットする場合floatformat
は、ダニエルの提案に従って使用しますが、丸めは行われません。
ORMで実行している場合は、Func()
式を使用できます。この回答を参照してください。