Python部门

我试图从-100到0范围内的一组数字规范化到10-100的范围,并且只是注意到即使没有variables也没有评估我期望的方式:

>>> (20-10) / (100-10) 0 

浮动部门也不工作:

 >>> float((20-10) / (100-10)) 0.0 

如果师的任何一方被施放到一个浮体上,它将会工作:

 >>> (20-10) / float((100-10)) 0.1111111111111111 

第一个例子中的每一个方面都是作为一个整数进行求值,这意味着最终的答案将被转换为一个整数。 由于0.111小于.5,所以它变成0.我认为这是不透明的,但是我猜这就是这样。

什么是解释?

您正在使用Python 2.x,其中整数部分将截断,而不是成为一个浮点数。

 >>> 1 / 2 0 

你应该让他们中的一个float

 >>> float(10 - 20) / (100 - 10) -0.1111111111111111 

from __future__ import division ,这部队/采取Python 3.x的行为,总是返回一个浮动。

 >>> from __future__ import division >>> (10 - 20) / (100 - 10) -0.1111111111111111 

你把整数,所以Python是给你一个整数回来 :

 >>> 10 / 90 0 

如果你把这个浮点数转换成浮点数,那么舍入已经完成了,换句话说,0整数总是变成0浮点数。

如果你在分区的任何一边都使用浮点数,那么Python会给你所期望的答案。

 >>> 10 / 90.0 0.1111111111111111 

所以在你的情况下:

 >>> float(20-10) / (100-10) 0.1111111111111111 >>> (20-10) / float(100-10) 0.1111111111111111 

您需要将其更改为浮动,然后再进行除法。 那是:

 float(20 - 10) / (100 - 10) 

它与你使用的Python版本有关。 基本上它采用了C的行为:如果你分两个整数,结果将被舍入到一个整数。 另外请记住,Python从左到右执行操作,当您进行types转换时会起到一定的作用。

例子:由于这是一个问题,当我正在进行算术运算(我应该将其转换为浮点数和哪个数字)时,总会在我脑海中popup一个问题,这个问题的一个例子就是:

 >>> a = 1/2/3/4/5/4/3 >>> a 0 

当我们划分整数时,不足为奇的是它变得更低。

 >>> a = 1/2/3/4/5/4/float(3) >>> a 0.0 

如果我们将最后一个整数转换为浮点数,我们仍然会得到零,因为在我们的数字被浮点除数的时候,由于整数除法已经变成了0。

 >>> a = 1/2/3/float(4)/5/4/3 >>> a 0.0 

与上面的情况相同,但将浮点types转移更靠近左侧。

 >>> a = float(1)/2/3/4/5/4/3 >>> a 0.0006944444444444445 

最后,当我们将第一个整数浮点型化时,结果就是所需的结果,因为从第一个分割开始,即最左边的一个,我们使用浮点数。

额外1:如果您正试图回答这个问题以改善算术评估,您应该检查这一点

额外2:请注意以下情况:

 >>> a = float(1/2/3/4/5/4/3) >>> a 0.0 

在Python 2.7中,如果input是整数,则/运算符是整数除法:

 >>>20/15 1 >>>20.0/15.0 1.33333333333 >>>20.0/15 1.33333333333 

在Python 3.3中,即使input是整数, /运算符也是一个浮点除法。

 >>> 20/15 1.33333333333 >>>20.0/15 1.33333333333 

对于Python 3中的整数除法,我们将使用//运算符。

//运算符是Python 2.7和Python 3.3中的整数除法运算符。

在Python 2.7和Python 3.3中:

 >>>20//15 1 

现在看比较

 >>>a = 7.0/4.0 >>>b = 7/4 >>>print a == b 

对于上面的程序,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,只是因为/是一个浮点数。

至less使其中一个浮动,那么它将是浮动除法,而不是整数:

 >>> (20.0-10) / (100-10) 0.1111111111111111 

将结果投入浮动太晚了。

通过放置'。'指定一个浮点数 之后的数字也会导致它默认浮动。

 >>> 1 / 2 0 >>> 1. / 2. 0.5 

无论哪种方式,它是整数除法。 10/90 = 0.在第二种情况下,你只是将0赋值为一个浮点数。

尝试将“/”的一个操作数转换为float:

 float(20-10) / (100-10) 

在你的第二个例子中已经发生分裂之后,你正在投射。 尝试这个:

 float(20-10) / float(100-10) 

我有些惊讶,没有人提到原来的海报可能会喜欢合理的数字。 如果您对此感兴趣,那么基于Python的程序Sage就会回来 。 (目前仍然基于Python 2.x,但3.x正在进行中。)

 sage: (20-10) / (100-10) 1/9 

这不是每个人的解决scheme,因为它确实做了一些准备工作,所以这些数字不是int s,而是Sage Integer类元素。 仍然值得一提的是Python生态系统的一部分。

就我个人而言,我最好在最开始插入一个1. * 。 所以expression就变成这样了:

 1. * (20-10) / (100-10) 

正如我总是做一些公式一样:

 accuracy = 1. * (len(y_val) - sum(y_val)) / len(y_val) 

所以不可能像20.0一样简单地添加一个.0 。 而在我的情况下,用float()包装可能会失去一点可读性。