4

私はPython(2.7.3)を学ぶ初心者で、コストを計算する簡単な演習が与えられましたが、すぐに、生成された結果の「正確さ」を実際に制御または理解できることに興味を持ちました。コンピューターで電卓を使用すると、自分が求めていると思う結果が得られます(つまり、非常に具体的であるように見えます)が、Pythonを使用する場合は、使用している値にフォーマット情報を追加する方法について非常に正確である必要があります。印刷されます。

私の質問の短いバージョンは次のとおりです。

返される通貨で作業しているときはいつでも使用できる簡単な解決策はありますか?

  • 小数点以下2桁
  • 切り上げは行いません(つまり、基本的に小数点以下2桁目の右側にあるものはすべて「切り捨て」ます)
  • 必要に応じて千個のセパレータを追加します

結果とバリエーションを確認するためにインタープリターを実行したい場合は、インタープリター(以下のコードを参照)をいじくり回してバリエーションをテストしてきました。

ありがとうございました。

# basic entry - both are seen as integers
print 'A:  ', 7/3

# test by printing out the types
print 'B:  ', type(7)
print 'C:  ', type(3)

# this is not necessary as they are already integers
print 'D:  ', int(7/3)

# converts the result of 7/3 into a floating number
print 'E:  ', float(7/3)

# defines the float version of 7 by the float version of 3
print 'F:  ', float(7) / float(3)

# coverts the results of the above into a string and assigns to variable
string_var = str(float(7) / float(3))

# print the string
print 'G:  ', string_var

# prints 4 characters of the string, but returns two decimal places
print 'H:  ', string_var[:4]

string_var = str(25.8545678888)

# prints 5 characters of the string, but returns two decimal places
print 'I:  ',string_var[:5]

# import the locale module
import locale
# sets to user's default settings (don't know what empty quotes are)
locale.setlocale( locale.LC_ALL, '' )

#set an arbitrary float number to a variable
float_var = 25.859

# apply locale.currency formatting
print 'J:  ',locale.currency(float_var)

# import the decimal module
from decimal import *

# the decimal version of the variable
print 'K:  ',Decimal(float_var)

# divide the decimal version by 2
print 'L:  ',Decimal(float_var) / 2

# divide the decimal version by the decimal verson of 2
print 'M:  ', Decimal(float_var) / Decimal(2)

# change decimal precision to 6
getcontext().prec = 6

# note there is no change in this value as precision only applied to
# result of calculations, see
#http://stackoverflow.com/questions/6483440/python-decimal-precision
print 'N:  ', Decimal(float_var)

# the following equation returns decimal precision to 6 (6 characters displayed)
print 'O:  ', Decimal(float_var) / 2

# example of 6 characters printed, not decimal places
# to the right of the decimal
print 'P:  ', Decimal(55550) / 130

# if you want to control places to the right of the decimal
# displayed without rounding and show thousand separators if
# necessary ?

編集:

返信をありがとうございました。これは私が行った解決策であり、すべての返信を組み合わせたものです。

def make_it_money(number):
    """
    always:
    - shows 2 decimal places
    - shows thousands separator if necessary
    - retains integrity of original var for later re-use
    - allows for concise calling
    """
    import math
    return '$' + str(format(math.floor(number * 100) / 100, ',.2f'))

# tests

var1 = 25.867
var2 = 25.864
var3 = 25.865
var4 = 2500.7869

print make_it_money(var1)
print make_it_money(var2)
print make_it_money(var3)
print make_it_money(var4)
4

2 に答える 2

9

format()関数を使用してフォーマットfloatまたはDecimalタイプします。

format(value, ',.2f')

その結果:

>>> format(12345.678, ',.2f')
'12,345.68'

は、出力に千単位の,区切り文字としてコンマを追加します。

通常、浮動小数点または 計算の後で無差別に切り捨てることは望ましくありません。とにかくそれをしなければならないと感じる場合は、フォーマットする前に明示的に行ってくださいDecimal

>>> import math
>>> format(math.floor(12345.678 * 100) / 100, ',.2f')
'12,345.67'
于 2013-03-27T14:42:17.007 に答える
3

PythonはCから多くを継承しているため、print %.2f構文を使用して、コンマの後に2つの値のみを含むfloatを出力できます。これにより、値は丸められます。

千の区切り記号も簡単なようです。SOに関するこの質問/回答をご覧ください。

https://stackoverflow.com/a/5513747/1093485

python-money( https://pypi.python.org/pypi/python-money)などの既存のモジュールをインポートすることもできます。

于 2013-03-27T14:17:14.297 に答える