【问题标题】:Converting floats from input into integers within an equation python在方程python中将浮点数从输入转换为整数
【发布时间】:2022-12-03 13:39:38
【问题描述】:

程序应该取一个整数和一个 x 的因子并计算多项式 a_nx^n+a_{n-1}x^{n-1}+a_{n-2}x^{n-2}+ ... a_2x^2+a_1x+a_0,其中每个 a_i 都是 x 的相应幂的系数。

基本上,多项式 3x^4+2x^3+x+5 可以表示为整数 32015,因为 x^2 系数为 0。然后由 x 值对其进行评估。但是,该程序不会接受第一个整数的小数作为输入,而是希望所有小数都包含在答案中。

我已经编写了大部分程序。

while True:
  try:
    number = list(reversed(input()))
    if int("".join(number)):
      break
  except:
    print("Invalid Input")

while True:
  try:
    x = float(input())
    break
  except:
    print("Invalid Input")



degree = len(number)

result = 0

for i in range(degree):
  result += int(number[i]) * pow(x,i)

print(result)

然而,对于输入 341 和 -2.9,程序期望

218.11999999999998

但正在接收

218.11999999999995

我怎样才能阻止答案中的小数点四舍五入?

【问题讨论】:

  • 似乎是浮点运算错误。我会对浮点数做更多的研究。

标签: python integer logic


【解决方案1】:

我研究过浮点数,docs 也将此声明为错误。但是,他们推荐使用 repr(),这是一个内置函数,可将您的输入转换为 17 位有效数字。您还可以创建一个 if 条件,仅在需要时运行 repr() 函数。

为什么会出现这个问题?浮点数在计算机硬件中表示为基数为 2(二进制)的分数。例如,小数 0.125 的值为 1/10 + 2/100 + 5/1000,同样,二进制小数 0.001 的值为 0/2 + 0/4 + 1/8。这两个分数具有相同的值,唯一真正的区别是第一个分数是以 10 为底的小数表示法,第二个分数以 2 为底数。

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多