【问题标题】:I'm in trouble. Decimal numbers don't come when I do math我有麻烦了。我做数学时不会出现小数
【发布时间】:2020-12-15 17:58:14
【问题描述】:
def call_result(label_result, n1, n2, n3):  
    num1 = (n1.get())  
    num2 = (n2.get())  
    num3 = (n3.get())
    num4 = 100
    num5 = 12
    num6 = 2

    main1 = float(int(num1))*float(int(num2)) / 12 / 2 / 100
    main2 = float(int(num1)) / float(int(num3))
    main3 = float(int(main2))+float(int(main1))
    
    label_result.config(text="Result = %d" % float(main3))  
    return  

我有麻烦了。我做数学时不会出现小数

答案应该是 20.84,但这段代码产生了 20。

【问题讨论】:

  • 请编辑您的问题,以便列出您的物理代码而不是链接。另外,“小数不来”是什么意思?你的代码输出和预期输出有什么区别?
  • @M-Chen-3 完成兄弟

标签: numbers decimal


【解决方案1】:

问题是由于int和float之间的转换

假设这三个数字是字符串,您应该直接将它们转换为浮点数并跳过中间步骤。 此外,当您从 float 转换为 int 然后再转换回 float 时,您会丢失十进制数据,因为 int 不存储它。

例如

main2 = 23.34        # main2 is a float with value 23.34
main2 = int(main2)   # main2 is now an int with value 23 
                     # Remember int (short for integer) cannot store floating point values and will truncate the number to make an integer
main2 = float(main2) # main2 is now a float but the value is 23.0 because you lost the precision when it was converted to int

我建议做这样的事情

def call_result(label_result, n1, n2, n3):  
    num1 = float(n1.get())  
    num2 = float(n2.get())  
    num3 = float(n3.get())
    num4 = 100
    num5 = 12
    num6 = 2

    main1 = num1 * num2 / 12 / 2 / 100
    main2 = num1 / num3
    main3 = main2 + main1

    label_result.config(text="Result = %.2f" % main3)  
    return  

要注意的另一件事是用于字符串的格式说明符。 %d 是一个整数,而 %f 是浮点数。即使main3 是一个浮点数,您最终也会在字符串中得到一个整数。 %.2f 会将浮点数截断到小数点后 2 位

"%.2f" % 123.45678 变为 123.45

看看string formatting guide here

【讨论】:

  • 非常感谢你和它的作品。@mudit-kapoo
  • @Imran123bd 请考虑接受答案,以便其他人看到问题已解决,以便他们更容易找到正确答案。
  • @M-Chen-3 我是新人.. 对不起兄弟。
猜你喜欢
  • 1970-01-01
  • 2022-01-05
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2017-08-25
相关资源
最近更新 更多