Python 中如何返回正确舍入的答案

65 阅读2分钟

我在编写一个脚本,询问用户不同面额硬币的数量,然后以美元和美分的形式显示总和。 但是,当显示美元时,它会对答案进行四舍五入。 例如,如果总额为 82 美分,它会指出我有 1 美元,而我需要它显示为 0 美元。 我无法正确使用 round 函数。 使用它是一个明智的选择,还是我应该坚持使用 format 函数?

huake_00257_.jpg

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