在Python中接受带小数的用户输入时我正在使用:
#will input meal subtotal
def input_meal():
mealPrice = input('Enter the meal subtotal: $')
mealPrice = float (mealPrice)
return mealPrice
返回确切输入的内容 - 比如$ 43.45
但是当使用该值来计算和显示我正在使用的税时:
#will calculate 6% tax
def calc_tax(mealPrice):
tax = mealPrice*.06
return tax
使用
返回$ 2.607的显示mealPrice = input_meal()
tax = calc_tax(mealPrice)
display_data(mealPrice, tax)
如何将其设为2.61美元呢? 原谅我,我意识到这是基本的东西,但他们并没有把它简称为Intro ......
谢谢!
答案 0 :(得分:24)
有几种方法可以执行此操作,具体取决于您希望如何保留值。
您可以使用基本的字符串格式,例如
'Your Meal Price is %.2f' % mealPrice
您可以将2
修改为您需要的精度。
但是,由于您正在处理资金,因此您应该查看decimal模块,该模块有一个名为quantize
的酷方法,它正好适用于货币应用程序。您可以像这样使用它:
from decimal import Decimal, ROUND_DOWN
mealPrice = Decimal(str(mealPrice)).quantize(Decimal('.01'), rounding=ROUND_DOWN)
请注意,rounding
属性也是纯粹可选的。
答案 1 :(得分: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
>>>
......正如预期的那样 - 然而,你说它“返回显示$ 2.607”......这可能是一个错字,只是交换两位数,除了你然后问“我怎么能设置为2.61美元?“所以看起来你真的意味着2.607
(可能以各种方式舍入到2.61)并且绝对不是算术上正确的结果2.067
(最多可能会舍入到2.07 ......绝对< em> not to 2.61(如您所要求))。
我想你首先在转录中出现了拼写错误,然后通过错误的伪造2.607
而不是实际的原始结果进行心理计算所需的舍入 - 这是发生了什么?它确实让我困惑了一段时间! - )
无论如何,要将浮点数舍入为两位小数,最简单的方法是内置函数round,第二个参数为2
:
>>> round(2.067, 2)
2.07
>>> round(2.607, 2)
2.61
对于两种可能性之间完全等距的数字,它是舍入到均匀的:
>>> round(2.605, 2)
2.6
>>> round(2.615, 2)
2.62
或者,正如文档所说的那样(用round
的单参数形式举例说明,它是最接近的整数):
如果两个倍数相等,则向着舍入进行舍入 甚至选择(例如,两者兼而有之 圆(0.5)和圆(-0.5)是0,和 圆(1.5)是2)。
然而,对于金钱的计算,我在其他答案中已经提出的建议,坚持decimal模块提供的内容,而不是float
数字。
答案 2 :(得分:2)
您没有显示display_data
的代码,但这是您需要做的事情:
print "$%0.02f" %amount
这是变量amount
的{{3}}。
由于这是初学者话题,我不会进入format specifier,但要注意它存在是件好事。
答案 3 :(得分:2)
要计算税金,您可以使用round
(毕竟,这就是餐厅所做的):
def calc_tax(mealPrice):
tax = round(mealPrice*.06,2)
return tax
要显示数据,您可以使用多行字符串和string format method:
def display_data(mealPrice, tax):
total=round(mealPrice+tax,2)
print('''\
Your Meal Price is {m:=5.2f}
Tax {x:=5.2f}
Total {t:=5.2f}
'''.format(m=mealPrice,x=tax,t=total))
请注意,格式方法是在Python 2.6中引入的,对于早期版本,您需要使用旧式字符串插值%
:
print('''\
Your Meal Price is %5.2f
Tax %5.2f
Total %5.2f
'''%(mealPrice,tax,total))
然后
mealPrice=input_meal()
tax=calc_tax(mealPrice)
display_data(mealPrice,tax)
的产率:
# Enter the meal subtotal: $43.45
# Your Meal Price is 43.45
# Tax 2.61
# Total 46.06
答案 4 :(得分:1)
这个标准库解决方案可能没有被提及,因为这个问题已经过时了。尽管这些答案可能会扩展到货币之外的其他用例,而货币需要使用不同的小数位,但似乎您需要货币来代替。
我建议您使用标准库locale.currency
对象。它似乎是为解决货币代表问题而创建的。
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
locale.currency(1.23)
>>>'$1.23'
locale.currency(1.53251)
>>>'$1.23'
locale.currency(1)
>>>'$1.00'
locale.currency(mealPrice)
货币也可以推广到其他国家。
答案 5 :(得分:0)
使用round()函数。
round(2.607) = 3
round(2.607,2) = 2.61