在Python中将浮点数与整数相乘时出现数学错误

0 投票
3 回答
63525 浏览
提问于 2025-04-18 21:04
def CalculateExchange(currency2,rate):
    currencyamount1 = int(input("Enter the amount: "))
    currencyamount2 = (currencyamount1 * rate)
    print(currencyamount2,currency2)

在程序中,当我把之前得到的汇率和用户输入的数字相乘时,结果并没有显示出一个实际的数字,而是以汇率的形式输出了输入的金额。例如,当汇率是5,输入的金额是6时,它只会输出6.6.6.6.6。我真的需要帮助,我知道这个问题看起来可能很小,很容易解决,但我在尝试解决它时遇到了困难。

3 个回答

-5

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,有人可能在使用一个叫做“库”的东西时,发现它的某些功能没有按照预期工作。这种情况下,大家通常会去问其他人,看看有没有人遇到过类似的问题。

在这个过程中,提问的方式很重要。如果你能清楚地描述你遇到的问题,提供一些相关的代码示例,别人就更容易理解你的情况,并给出帮助。比如说,提到你使用的是什么工具、你想要实现什么、以及你遇到的具体错误信息,这些都是很有用的。

总之,遇到问题时,清晰地表达你的疑问和背景信息,可以大大提高得到帮助的机会。

currencyamount2 = float(currencyamount1 * rate)
1

在Python 2中,函数 input 会对用户输入的字符串进行 eval 操作:

Python 2.7.7 (default, Jun 14 2014, 23:12:13) 
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> x=input('Enter x: ')
Enter x: 2
>>> x
2
>>> type(x)
<type 'int'>
>>> x*5
10

比如说,如果输入一个浮点数:

>>> x=input('Enter x: ')
Enter x: 2.2
>>> type(x)
<type 'float'>
>>> x*5
11.0

因为在应用程序中直接接受用户输入的任意代码被认为是不安全的,所以在Python 3中这个行为发生了变化。

在Python 3中,input 始终返回一个字符串:

Python 3.4.1 (default, May 19 2014, 13:10:29) 
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> x=input('Enter x: ')
Enter x: 2.
>>> type(x)
<class 'str'>

这就解释了你的结果:

>>> x*5
'2.2.2.2.2.'

如果你想在Python 3中安全地实现类似的功能,可以把 input 放在 ast.literal_eval 的调用中:

>>> from ast import literal_eval
>>> x=literal_eval(input('Enter x: '))
Enter x: 2.2
>>> x
2.2
>>> type(x)
<class 'float'>

或者,直接用 int(x)float(x) 将用户输入转换成你想要的数据类型。

5

解决这种错误最简单的方法是,在乘法运算之前,把你的整数(int)转换回浮点数(float)。

def CalculateExchange(currency2,rate):
    currencyamount1 = int(input("Enter the amount: "))
    currencyamount2 = (float(currencyamount1) * float(rate))
    print(currencyamount2,currency2)

撰写回答