0

問題があります。大学向けのプロジェクトがあり、Mac バージョンの Python コンパイラと Windows バージョンの Python コンパイラを実行すると、異なる値が得られます。

Python バージョン: 2.7 ライブラリ: Numpy

手がかりはありますか?

p161 と pNUMBER は [0,1,2] numpy の座標を持つ配列です。私が持っているコード:

#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%
____________________________

アップデート:

すべての配列は両方の OS で問題ありません。問題は p161[0]/p351[0] と他の部門にあります。MAC では 0.76 を取得し、Windows 0.0 では、その後 Windows で *100 を実行すると出力として-2を取得します。

この作例はPASO38 MATERIA PRIMA 517です。

4

1 に答える 1

3

問題は、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 コードでは使用できません。

明らかに浮動小数点除算が必要なので、どこでも次のいずれかを実行する必要があります。

  1. /常に真の浮動小数点除算を意味する Python 3 を使用します。
  2. を使用しfrom __future__ import divisionます。
  3. float除算を実行する前に、オペランドの 1 つを に変換します。
于 2013-06-30T20:17:06.797 に答える