[英]Specifying number of decimal places in Python
在 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 美元?
原谅我,我意识到这是基本的东西,但他们不会无缘无故地称之为介绍......
谢谢!
有几种方法可以做到这一点,具体取决于您希望如何保持价值。
您可以使用基本的字符串格式,例如
'Your Meal Price is %.2f' % mealPrice
您可以将2
修改为您需要的任何精度。
但是,由于您正在处理货币,因此您应该查看小数模块,该模块具有一个名为quantize
的很酷的方法,该方法完全适用于货币应用程序。 你可以像这样使用它:
from decimal import Decimal, ROUND_DOWN
mealPrice = Decimal(str(mealPrice)).quantize(Decimal('.01'), rounding=ROUND_DOWN)
请注意, rounding
属性也是完全可选的。
我被你提到的第二个数字(并确认由您所要求的四舍五入)震惊-起初我还以为我的心算本能已开始令我失望(我年纪越来越大,毕竟,这样可能会相同作为我曾经清晰的记忆!-)...但后来我确认它还没有,正如我想象的那样,通过使用 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……绝对不是你要求的 2.61)。
我想您首先在转录中出现错字,然后根据错字错误2.607
而不是实际的原始结果在心里计算出所需的舍入——是这样吗? 它确实让我困惑了一段时间!-)
无论如何,要将浮点数四舍五入为两位十进制数字,最简单的方法是使用第二个参数为2
的内置函数round :
>>> 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
为例,它四舍五入到最接近的整数):
如果两个倍数相等,则向偶数选择舍入(例如,round(0.5) 和 round(-0.5) 均为 0,而 round(1.5) 为 2)。
但是,对于货币计算,我支持其他答案中已经给出的建议,坚持使用小数模块提供的内容,而不是float
。
要计算税收,您可以使用round
(毕竟,这就是餐厅所做的):
def calc_tax(mealPrice):
tax = round(mealPrice*.06,2)
return tax
要显示数据,您可以使用多行字符串和字符串格式方法:
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))
请注意 format 方法是在 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
这个标准库解决方案可能没有被提及,因为这个问题已经过时了。 虽然这些答案可能适用于需要不同级别小数的货币以外的其他用例,但似乎您需要它来处理货币。
我建议您使用标准库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)
货币也适用于其他国家。
使用 round() 函数。
round(2.607) = 3
round(2.607,2) = 2.61
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.