为什么这些操作返回0.0?

时间:2017-01-07 05:54:53

标签: python python-2.7 math

我的问题是为什么,

import math
a = math.sqrt(3)
area = a * (1 / 2)
print area

输出0.0,但是,

import math
a = math.sqrt(3)
area = a / 2
print area

输出0.866025403784

2 个答案:

答案 0 :(得分:0)

实际上这是2.X中整数截断的问题。

X / Y. 经典和真正的分工。 在Python 2.X中,此运算符执行经典除法,截断整数的结果,并保留浮点数的余数(即小数部分)。 在2.X中,/执行经典除法,如果两个操作数都是整数,则执行截断整数除法,否则执行浮点除法(保留余数)。

在Python 3.X中,它执行 true division ,无论类型如何,始终将余数保留在浮点结果中。 在3.X中,/ now总是执行真正的除法,返回包含任何余数的浮点结果,而不管操作数类型如何。

在Python 2.X中你可以修复"这可以通过将从__future__ import division 添加到您的脚本中来实现。当使用/运算符并使用//进行整数除法时,这将始终执行浮点除法。

但你可以使分区中至少有一个操作数是一个浮点数,你得到一个浮动结果。

$(document).ready(function(){
  CheckLastVisible();

  $(window).resize(function() {
    CheckLastVisible();
  });
});

function CheckLastVisible(){
  if($("#last-child").is(":visible")){
      $("#last-child").parents(".left:eq(0)").addClass("left-fixed");
  }
  else{
     $("#last-child").parents(".left:eq(0)").removeClass("left-fixed");
  }
}
  
    
      

面积= A *(1/2)       区域       0.8660254037844386

    
  

我希望这会对你有所帮助。

答案 1 :(得分:-1)

我认为你正在使用python 2.7这是python 2.7的问题它将1/2评为零,因为它认为1&& 2都是整数所以它给出结果为整数但在第二种情况下你的math.sqrt( )函数返回一个double值,因此它将结果赋予double。但是如果你使用python 3.0,那么问题就解决了你在两种情况下都可以得到相同的结果,你可以尝试将1/2作为0.5。