我遇到了一个问题,我有一个大学的项目,当我运行Mac版本的python编译器和Windows版本的python编译器时,我得到了不同的值。
Python版本:2.7图书馆:Numpy
有线索吗?
p161和pNUMBER是numpy中坐标为[0,1,2]的数组我的代码:
#PASO 38
print OPCION
print "PASO 38 - ESTRUCTURA DE COSTOS TOTALES POR PRODUCTO [ DATOS EXPRESADOS EN PORCENTAJES DEL COSTO TOTAL DEL PRODUCTO ]"
print
paso38517=numpy.array([100*p161[0]/p351[0],100*p231[0]/p351[0],100*p301[0]/p351[0]])
paso38525=numpy.array([100*p161[1]/p351[1],100*p231[1]/p351[1],100*p301[1]/p351[1]])
paso38535=numpy.array([100*p161[2]/p351[2],100*p231[2]/p351[2],100*p301[2]/p351[2]])
print "TIPO 517 525 535"
print "_____________________________________"
print str("MATERIA PRIMA : ")+ numpy.array_str(paso38517[0])+str("% ")+numpy.array_str(paso38525[0])+str("% ")+numpy.array_str(paso38535[0])+str("%")
print str("MANO DE OBRA : ")+ numpy.array_str(paso38517[1])+str("% ")+numpy.array_str(paso38525[1])+str("% ")+numpy.array_str(paso38535[1])+str("%")
print str("USO DE MAQUINA : ")+ numpy.array_str(paso38517[2])+str("% ")+numpy.array_str(paso38525[2])+str("% ")+numpy.array_str(paso38535[2])+str("%")
print "_____________________________________"
print
#PASO 39
paso39=numpy.array([100*mp1/costofinal,100*mo1/costofinal,100*um1/costofinal])
print OPCION
print "PASO 39 - ESTRUCTURA DE COSTOS TOTAL [ DATOS EXPRESADOS EN PORCENTAJES DE LOS COSTOS TOTALES ]"
print
print "TIPO COSTO"
print "____________________________"
print str("MATERIA PRIMA : ")+ numpy.array_str(paso39[0])+str("%")
print str("MANO DE OBRA : ")+ numpy.array_str(paso39[1])+str("%")
print str("USO DE MAQUINA : ")+ numpy.array_str(paso39[2])+str("%")
print "____________________________"
print
在windows和mac上也是如此,之后我有一些打印
在MAC:上打印
OXICORTE - SOLDADURA MANUAL
PASO 38 - ESTRUCTURA DE COSTOS TOTALES POR PRODUCTO [ DATOS EXPRESADOS EN PORCENTAJES DEL COSTO TOTAL DEL PRODUCTO ]
TIPO 517 525 535
_____________________________________
MATERIA PRIMA : 76% 76% 73%
MANO DE OBRA : 17% 17% 20%
USO DE MAQUINA : 6% 6% 6%
_____________________________________
OXICORTE - SOLDADURA MANUAL
PASO 39 - ESTRUCTURA DE COSTOS TOTAL [ DATOS EXPRESADOS EN PORCENTAJES DE LOS COSTOS TOTALES ]
TIPO COSTO
____________________________
MATERIA PRIMA : 75%
MANO DE OBRA : 17%
USO DE MAQUINA : 6%
____________________________
在WINDOWS上打印:
OXICORTE - SOLDADURA MANUAL
PASO 38 - ESTRUCTURA DE COSTOS TOTALES POR PRODUCTO [ DATOS EXPRESADOS EN PORCENTAJES DEL COSTO TOTAL DEL PRODUCTO ]
TIPO 517 525 535
_____________________________________
MATERIA PRIMA : **-2%** **16%** 73%
MANO DE OBRA : **-9%** **17%** 20%
USO DE MAQUINA : 6% 6% 6%
_____________________________________
OXICORTE - SOLDADURA MANUAL
PASO 39 - ESTRUCTURA DE COSTOS TOTAL [ DATOS EXPRESADOS EN PORCENTAJES DE LOS COSTOS TOTALES ]
TIPO COSTO
____________________________
MATERIA PRIMA : **-8%**
MANO DE OBRA : **1%**
USO DE MAQUINA : 6%
____________________________
更新:
所有阵列在两个操作系统中都可以,问题在于p161[0]/p351[0]和其他分区,在MAC中,我得到0.76,在Windows中得到0.0,然后在那之后,当我做*100时,在Windows中将得到-2作为输出。
此示例位于PASO38 MATERIA PRIMA 517上。
问题出在p161[0]/p351[0]和其他部分。在Mac上我得到0.76,在Windows上我得到0.0。
这听起来很像你的除法运算符在Mac上执行浮点除法,在Windows上截断整数除法。如果你在Mac上运行Python 3,在Windows上运行Python 2,就会发生这种情况。但老式的print
语句表明情况并非如此。如果你执行了,也会发生这种情况
from __future__ import division
在Mac上,但不在Windows代码中。
既然你显然想要浮点除法,那么你应该做以下操作之一,无处不在:
- 使用Python 3,其中
/
始终表示真正的浮点除法 - 使用
from __future__ import division
- 在执行除法之前,将其中一个操作数转换为
float