繁体   English   中英

在Python中回答2位小数的答案

[英]Round an answer to 2 decimal places in Python

我遇到的问题是我将结果四舍五入到小数点后两位。 我的应用程序获得了正确的结果,但是,我很难将应用程序舍入到最接近的小数,就像使用货币一样

cost = input("\nEnter the 12 month cost of the Order: ")
cost = float(cost)

print("\n12 Month Cost:",
  cost * 1,"USD")
print("6 Month Cost:",
  cost * 0.60,"USD")
print("3 Month Cost:",
  cost * 0.36,"USD")

所以例如,如果12个月的价格是23美元,6个月的价格是13.799999999999999,但我希望它显示13.80

我环顾了谷歌以及如何围绕一个数字但是在舍入结果方面找不到多少帮助。

您应该使用格式说明符:

print("6 Month Cost: %.2fUSD" % (cost * .6))

更好的是,你根本不应该依赖浮点数而是使用decimal模块,它可以提供任意精度,并且可以更好地控制舍入方法:

from decimal import Decimal, ROUND_HALF_UP
def round_decimal(x):
  return x.quantize(Decimal(".01"), rounding=ROUND_HALF_UP)

cost = Decimal(input("Enter 12 month cost: "))
print("6 Month Cost: ", round_decimal(cost * Decimal(".6")))

一种经典的方法是乘以100,加0.5(这是圆形)和int()结果。 现在你有圆形的分数,再次除以100以获得圆形浮点数。

cost = 5.5566
cost *= 100 # cost = 555.66
cost += 0.5 # cost = 556.16
cost = int(cost) # cost = 556
cost /= float(100) # cost =  5.56

cost = 5.4444
cost = int(( cost * 100 ) + 0.5) / float(100) # cost = 5.44

如果您只想将其作为字符串,格式可以帮助:

format(cost, '.2f')

此函数返回一个字符串,该字符串按第二个参数中的定义格式化。 因此,如果cost包含3.1418,则上面的代码返回字符串'3.14'。

如果您只是想要打印,字符串格式将起作用:

print("\n12 Month Cost:%.2f USD"%(cost*1))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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