10

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

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

我环顾了谷歌以及如何对数字进行舍入,但在舍入结果方面找不到太多帮助。

4

4 回答 4

15

您应该使用格式说明符:

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")))
于 2012-11-19T22:39:45.583 回答
2

一个经典的方法是乘以 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
于 2012-11-19T22:37:34.657 回答
2

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

format(cost, '.2f')

此函数返回一个字符串,该字符串的格式与第二个参数中定义的一样。因此,如果成本包含 3.1418,则上面的代码将返回字符串“3.14”。

于 2013-09-10T21:12:43.770 回答
1

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

print("\n12 Month Cost:%.2f USD"%(cost*1))
于 2012-11-19T22:40:09.433 回答