在Python中指定小数位数

Jan*_*net 15 python

在Python中接受带小数的用户输入时我正在使用:

#will input meal subtotal  
def input_meal():  
    mealPrice = input('Enter the meal subtotal: $')  
    mealPrice = float (mealPrice)  
    return mealPrice  
Run Code Online (Sandbox Code Playgroud)

它确切地返回输入的内容 - 比如$ 43.45
但是当使用该值来计算和显示我正在使用的税时:

#will calculate 6% tax  
def calc_tax(mealPrice):  
    tax = mealPrice*.06  
    return tax
Run Code Online (Sandbox Code Playgroud)

使用返回$ 2.607的显示

mealPrice = input_meal()
tax = calc_tax(mealPrice)
display_data(mealPrice, tax)  
Run Code Online (Sandbox Code Playgroud)

我怎样才能将其设置为2.61美元?
原谅我,我意识到这是基本的东西,但他们并没有把它简称为Intro ...

谢谢!

Bar*_*tek 27

有几种方法可以执行此操作,具体取决于您希望如何保存该值.

您可以使用基本的字符串格式,例如

'Your Meal Price is %.2f' %  mealPrice
Run Code Online (Sandbox Code Playgroud)

您可以修改所需的2精度.

但是,由于您正在处理资金,因此您应该查看十进制模块,该模块具有一个名为cool的方法quantize,该方法正好适用于货币应用程序.您可以像这样使用它:

from decimal import Decimal, ROUND_DOWN
mealPrice = Decimal(str(mealPrice)).quantize(Decimal('.01'), rounding=ROUND_DOWN)
Run Code Online (Sandbox Code Playgroud)

请注意,该rounding属性也是纯可选的.

  • +1 为十进制参考;使用浮动,您会得到一些令人惊讶的四舍五入(例如,尝试餐价为“0.25”)。但我不认为你的十进制行有效:尝试 `quantize(Decimal('0.01'))` 而不是 `quantize('.01')`。 (2认同)

Ale*_*lli 7

我对你提到的第二个数字感到惊讶(和您所要求的四舍五入确认) -起初我还以为我的心算本能已开始令我失望(我正在变老,毕竟,这样可能会相同作为我曾经犀利的记忆! - )...然后我确认它还没有,正如我想象的那样,使用Python 3.1,以及复制和粘贴......:

>>> def input_meal():  
...     mealPrice = input('Enter the meal subtotal: $')  
...     mealPrice = float (mealPrice)  
...     return mealPrice  
... 
>>> def calc_tax(mealPrice):  
...     tax = mealPrice*.06  
...     return tax
... 
>>> m = input_meal()
Enter the meal subtotal: $34.45
>>> print(calc_tax(m))
2.067
>>> 
Run Code Online (Sandbox Code Playgroud)

......正如预期的那样 - 然而,你说它"返回2.607美元的显示"......这可能是一个错字,只是交换两位数,除了你然后问"我如何设置为$ 2.61而不是? " 所以它真的看起来你真正的意思2.607(可能以各种方式舍入到2.61)并且绝对不是算术上正确的结果,2.067(最多可能会舍入到2.07 ......绝对不是 2.61,如你所要求的那样).

我想你首先在转录中出现了拼写错误,然后通过错误的伪造2.607而不是实际的原始结果进行心理计算所需的舍入- 是发生了什么?它确实让我困惑了一段时间! - )

无论如何,要将浮点数舍入为两位小数,最简单的方法是内置函数round,其第二个参数为2:

>>> round(2.067, 2)
2.07
>>> round(2.607, 2)
2.61
Run Code Online (Sandbox Code Playgroud)

对于两种可能性之间完全等距的数字,它是舍入到偶数:

>>> round(2.605, 2)
2.6
>>> round(2.615, 2)
2.62
Run Code Online (Sandbox Code Playgroud)

或者,正如文档所说的那样(用单参数形式表示round,其舍入为最接近的整数):

如果两个倍数相等,则向均匀选择进行舍入(例如,圆形(0.5)和圆形(-0.5)都是0,圆形(1.5)是2).

然而,对于金钱的计算,我在其他答案中已经给出的建议是第二,坚持十进制模块提供的,而不是float数字.


Ste*_*hen 2

您没有显示 的​​代码display_data,但您需要执行以下操作:

print "$%0.02f" %amount
Run Code Online (Sandbox Code Playgroud)

这是变量的格式说明符amount

由于这是初学者主题,我不会讨论浮点舍入错误,但最好知道它的存在。