我在编写一个脚本,询问用户不同面额硬币的数量,然后以美元和美分的形式显示总和。 但是,当显示美元时,它会对答案进行四舍五入。 例如,如果总额为 82 美分,它会指出我有 1 美元,而我需要它显示为 0 美元。 我无法正确使用 round 函数。 使用它是一个明智的选择,还是我应该坚持使用 format 函数?
def main():
pennies = get_input("Enter pennies : ")
nickels = get_input("Enter nickels : ")
dimes = get_input("Enter dimes : ")
quarters = get_input("Enter quarters : ")
print("You Entered : ")
print("\tPennies : ", pennies)
print("\tNickels : ", nickels)
print("\tDimes : ", dimes)
print("\tQuarters : ", quarters)
total_value = get_total(pennies, nickels, dimes, quarters)
dollars = get_dollars(pennies, nickels, dimes, quarters)
left_over_cents = get_left_over_cents(pennies, nickels, dimes, quarters)
print("Total = $", format(total_value, ".2f"), sep="")
print(
"You Have", format(dollars, ".0f"), "dollars and", left_over_cents, "cent(s)"
)
def get_input(message):
notify = int(input("I don't know"))
while notify >= 0:
return notify
def get_total(pennies, nickels, dimes, quarters):
pennies = 0.01 * pennies
nickels = 0.05 * nickels
dimes = 0.10 * dimes
quarters = 0.25 * quarters
total_value = pennies + nickels + dimes + quarters
return total_value
def get_dollars(pennies, nickels, dimes, quarters):
pennies = 0.01 * pennies
nickels = 0.05 * nickels
dimes = 0.10 * dimes
quarters = 0.25 * quarters
total_value = pennies + nickels + dimes + quarters
dollars = total_value
return dollars
def get_left_over_cents(pennies, nickels, dimes, quarters):
pennies = 0.01 * pennies
nickels = 0.05 * nickels
dimes = 0.10 * dimes
quarters = 0.25 * quarters
total_value = pennies + nickels + dimes + quarters
left_over_cents = total_value
return left_over_cents
main()
2、解决方案 通常,最好使用 decimal.Decimal 来表示货币值:
import decimal
penny_value = decimal.Decimal(".01")
nickle_value = decimal.Decimal(".05")
dime_value = decimal.Decimal(".10")
quarter_value = decimal.Decimal(".25")
如果您要计算硬币的数量,则应将上述常量乘以您的硬币数量,这样就不会出现舍入错误。
pennies = 2
nickles = 1
dimes = 0
quarters = 3
total_value = (
pennies * penny_value
+ nickles * nickle_value
+ dimes * dime_value
+ quarters * quarter_value
)
dollars = total_value.quantize(1, rounding=decimal.ROUND_DOWN)
现在,dollars 是 Decimal('0'),等于零。
>>> print total_value
0.82
>>> print dollars
0
如果您想坚持使用 int 和 float 来向下舍入,请将其转换为 int,它将朝着零舍入:
total_value = .82
dollar_value = int(total_value)
现在,dollar_value 是 0
要使用此方法,请执行以下操作:
def get_dollars(pennies, nickels, dimes, quarters):
pennies = 0.01 * pennies
nickels = 0.05 * nickels
dimes = 0.10 * dimes
quarters = 0.25 * quarters
total_value = pennies + nickels + dimes + quarters
dollars = int(total_value)
return dollars