为什么我没有获得浮点数?

时间:2017-07-28 23:16:07

标签: python floating-point

我正在编写一个非常简单的练习脚本(我是一个新手),它将接受a,b,c和x的值并将它们插入到二次函数中。

出于某种原因,我没有得到浮点数到我的等式中。我尝试将float()添加到比我需要的更多的地方,但我仍然得到定点数。

注意:在尝试了几种方法之后,我最终得到了这么多浮动输入;这仅仅是最后一次迭代。这是我的代码:

def quadratic(a, b, c, x):

    return float(a*x**2 + b*x + c)

print "Let's find the output value for the values in a quatratic function..."
print "Our formula is ax^2 + bx + c = ?"

a = float(raw_input("What value for 'a'?"))

b = float(raw_input("What value for 'b'?"))

c = float(raw_input("What value for 'c'?"))

x = float(raw_input("What value for 'x'?"))

solution = float(quadratic(a, b, c, x))

print "(%d)(%d)^2 + (%d)(%d) + %d = %d" % (a, x, b, x, c, solution)

这是我的输出(在输入a,b,c,x的十进制值之后)。

Let's find the output value for the values in a quatratic function...

Our formula is ax^2 + bx + c = ?

What value for 'a'?.75

What value for 'b'?.44

What value for 'c'?.3467

What value for 'x'?.77

(0)(0)^2 + (0)(0) + 0 = 1

显然,这是我的用户错误。有人可以提供有关我为何获得定点数的见解吗?谢谢!

1 个答案:

答案 0 :(得分:0)

正如其他几位用户评论的那样,问题不在于您的计算,而在于输出字符串的格式。 %d格式化序列告诉Python在将相关值转换为字符串之前将其转换为整数。使用不同的代码会使它按照您期望的方式工作。

最明显的代码是%f,表示你想要一个浮点值。如果希望浮点数舍入到特定数量的小数位(而不是默认值可能很长),可以添加一些额外的字符。例如,使用%.4f将四位小数舍入,这可能是一个不错的选择,因为它是您在示例输入中使用的最大有效位数。

另一种选择是使用%s,这意味着您希望使用内置str函数将参数直接转换为字符串。这不允许%f的更好的舍入选项,但它几乎适用于任何类型(甚至非数字类型)。

我实际上更进一步,建议您完全使用其他格式化方法。 str.format方法允许您执行比%运算符更复杂的格式化,这在这种情况下很有用,因为您希望重复两次相同的x值。使用带有str.format的适当格式字符串可以复制输出中的值,而无需在参数中重复它。这是使用str.format的关键字参数进行此操作的一种方法:

print "({a:.4f})({x:.4f})^2 + ({b:.4f})({x:.4f}) + {c:.4f} = {solution:.4f}".format(
    a=a, b=b, c=c, solution=solution, x=x
)

如果您使用的是Python 3.6+(我也会因其他各种原因而推荐),您可以使用所谓的"F-strings"来执行与上述调用相同的格式设置,但无需显式调用format并将一堆变量作为关键字参数传递给自己的名称。当您使用f为第一个引号添加前缀时,Python将根据您当前命名空间中的变量为您执行格式设置:

print(f"({a:.4f})({x:.4f})^2 + ({b:.4f})({x:.4f}) + {c:.4f} = {solution:.4f}")