【问题标题】:Python Math - Floating with financial output comes out incorrectPython 数学 - 财务输出浮动结果不正确
【发布时间】:2016-12-31 01:46:59
【问题描述】:

在零售审计计算器的一小部分代码中,我尝试允许输入零售值并将其乘以最多 2 个输入的数量 预期(预期)结果是 $X*Y=$Z .

我曾尝试修改代码,但似乎对这个数学如何(不是)正常工作感到困惑。

我在代码中尝试了许多不同的配置,我取得的最大成果如下:

#Retail value of item, whole number (i.e. $49.99 entered as 4999)
rtlVAL = input("Retail Value: ")

#Quantity of Items - can be multiplied for full stack items, default if no entry is '1'
qt1 = float(input("Quantity 1: ")) #ex. 4
qt2 = float(input("Quantity 2: ") or "1") #ex " "

#Convert the Retail Value to finacial format (i.e 4999 to $49.99)
rtl = float("{:.2}".format (rtlVAL))

# Screen Output
qtyVAL = int(qt1)*int(qt2)
print("$" + str(qtyVAL*rtl))

输入的值为: 零售价值:4999 数量 1:4 数量 2:(空白)

预期性能为 4999 * 4 *(因为没有条目默认值为 1),预期结果为 $199.96

这段代码的结果是$196.0,所以它不仅是错误的结论,而且少了两位小数

我不完全确定为什么数学在预期的上下文中出现错误。

我在这里缺少什么?


在第 9 行,我尝试了以下操作:

rtl = float("{:.2f}".format (rtlVAL))

rtl = int("{:.2f}".format (rtlVAL))

回报是

ValueError:“str”类型的对象的未知格式代码“f”

如果我将第 13 行更改为:

print("$" + float(qtyVAL*rtl))

我明白了

TypeError: 必须是 str,而不是 float

将前面的任何一个更改与后者结合使用将返回 ValueError:


Python 3.4 和 3.6

我确实搜索了一些关于 Python、数学、浮点数和格式的其他 SO 问题,但这些问题正在寻找并提出比这更先进和更复杂的东西,所以我无法收集答案来做出一个上下文应用程序或它主要应用于 Python 2.7,其中某些代码(例如 raw input())只是 input() 并在 Python 3.x 中由 int(input()) 更改以退出 str 值(据我了解这个目的。

我不认为这是重复的,但如果我错过了其中的某些内容,我深表歉意 - 这不是故意的。

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    无需纠结数字格式:

    rtl = float(rtlVAL)/100
    

    只需将零售价值除以 100 即可得到美元价值

    编辑:

    顺便说一句,它出现 196 的原因是因为您的数字格式采用了 rtlVAL 的前两位数字 - 在您的情况下为 49 - 然后乘以它。

    【讨论】:

    • 谢谢。我想知道为什么它评估为 196 并且在您回答时正在调查。我想我正忙于确保数字格式正确,我错过了更明显的解决方案。
    • 我昨天花了大约两个小时试图弄清楚为什么我的变量 requirement 会返回 null。原来我声明为requirements。直到你做到这一点,你才被允许感到愚蠢。很高兴我能帮上忙。
    • 听起来像是我使用 VBA 和 Excel 的几集。我想这发生在我们所有人身上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多