繁体   English   中英

在 Python 中指定小数位数

[英]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

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

print "$%0.02f" %amount

这是变量amount格式说明符

由于这是初学者主题,我不会进入浮点舍入错误,但很高兴知道它存在。

要计算税收,您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM