Ada*_*son 129 python math python-2.x
我试图将一组数字从-100标准化为0到10-100的范围,并且只是注意到即使没有变量,也没有评估我期望它的方式:
>>> (20-10) / (100-10)
0
Run Code Online (Sandbox Code Playgroud)
浮动部门也不起作用:
>>> float((20-10) / (100-10))
0.0
Run Code Online (Sandbox Code Playgroud)
如果除法的任何一方被强制转换为浮点数,它将起作用:
>>> (20-10) / float((100-10))
0.1111111111111111
Run Code Online (Sandbox Code Playgroud)
第一个示例中的每一侧都评估为int,这意味着最终答案将被转换为int.因为0.111小于.5,所以它会变为0.在我看来,这不是透明的,但我想这就是它的方式.
解释是什么?
ken*_*ytm 242
您正在使用Python 2.x,其中整数除法将截断而不是成为浮点数.
>>> 1 / 2
0
Run Code Online (Sandbox Code Playgroud)
你应该让他们中的一个float:
>>> float(10 - 20) / (100 - 10)
-0.1111111111111111
Run Code Online (Sandbox Code Playgroud)
或者from __future__ import division,/采用Python 3.x总是返回浮点数的行为的力量.
>>> from __future__ import division
>>> (10 - 20) / (100 - 10)
-0.1111111111111111
Run Code Online (Sandbox Code Playgroud)
Dav*_*ebb 20
你正在使用Integers,所以Python给你一个整数:
>>> 10 / 90
0
Run Code Online (Sandbox Code Playgroud)
如果你之后将它转换为浮点数,则舍入将已经完成,换句话说,0整数将始终变为0浮点数.
如果您在分区的任何一侧使用浮动,那么Python将为您提供您期望的答案.
>>> 10 / 90.0
0.1111111111111111
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下:
>>> float(20-10) / (100-10)
0.1111111111111111
>>> (20-10) / float(100-10)
0.1111111111111111
Run Code Online (Sandbox Code Playgroud)
A. *_*evy 11
在进行除法之前,您需要将其更改为浮点数.那是:
float(20 - 10) / (100 - 10)
Run Code Online (Sandbox Code Playgroud)
Har*_*han 11
在Python 2.7中,/如果输入是整数,则运算符是整数除法:
>>>20/15
1
>>>20.0/15.0
1.33333333333
>>>20.0/15
1.33333333333
Run Code Online (Sandbox Code Playgroud)
在Python 3.3中,/即使输入是整数,运算符也是浮点除法.
>>> 20/15
1.33333333333
>>>20.0/15
1.33333333333
Run Code Online (Sandbox Code Playgroud)
对于Python 3中的整数除法,我们将使用//运算符.
在//操作者在两个Python 2.7版和Python 3.3的整数除法运算符.
在Python 2.7和Python 3.3中:
>>>20//15
1
Run Code Online (Sandbox Code Playgroud)
现在,看看比较
>>>a = 7.0/4.0
>>>b = 7/4
>>>print a == b
Run Code Online (Sandbox Code Playgroud)
对于上面的程序,Python 2.7中的输出为False,Python 3.3中的输出为True.
在Python 2.7中,a = 1.75,b = 1.
在Python 3.3 a = 1.75和b = 1.75中,只是因为/是浮点除法.
它与你使用的python版本有关.基本上它采用C行为:如果你划分两个整数,结果将向下舍入为整数.还要记住,Python从左到右执行操作,这在您进行类型转换时起作用.
示例:由于这是一个在我进行算术运算时总会出现在我头脑中的问题(我应该转换为float和哪个数字),这个方面的例子如下:
>>> a = 1/2/3/4/5/4/3
>>> a
0
Run Code Online (Sandbox Code Playgroud)
当我们划分整数时,毫不奇怪它会降低整数.
>>> a = 1/2/3/4/5/4/float(3)
>>> a
0.0
Run Code Online (Sandbox Code Playgroud)
如果我们将最后一个整数强制转换为float,那么我们仍然会得到零,因为当我们的数字除以浮点时,由于整数除法,它已经变为0.
>>> a = 1/2/3/float(4)/5/4/3
>>> a
0.0
Run Code Online (Sandbox Code Playgroud)
与上面相同的情况,但将浮动类型转移到更接近左侧.
>>> a = float(1)/2/3/4/5/4/3
>>> a
0.0006944444444444445
Run Code Online (Sandbox Code Playgroud)
最后,当我们将第一个整数强制转换为float时,结果是所需的整数,因为从第一个分区开始,即最左边的整数,我们使用浮点数.
额外1:如果您试图回答这个问题以改进算术评估,您应该检查一下
额外2:请注意以下情况:
>>> a = float(1/2/3/4/5/4/3)
>>> a
0.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
409977 次 |
| 最近记录: |