我有一个python脚本,它读取从C#传递的数据。但是当我尝试在python脚本中获取变量的值时...它不会获取值。此问题仅适用于float类型的变量。 我尝试获取" ErrorRate"的值时的示例(在python脚本中),它只返回0.0值..虽然actaule值是37.55
// C#script
// dt is datatable from C# being passed to python
var engine = Python.CreateEngine();
ScriptScope scope = engine.CreateScope();
ScriptRuntime runTime = Python.CreateRuntime();
ScriptEngine pyEngine = runTime.GetEngine("py");
MemoryStream ms = new MemoryStream();
scope.SetVariable("dt",dtmp);
runTime.IO.SetOutput(ms, new StreamWriter(ms));
ScriptSource ss = pyEngine.CreateScriptSourceFromString(
txtPythonCode.Text.Trim(),
SourceCodeKind.Statements);
ss.Execute(scope);
dynamic v1 = scope.GetVariable("Error");
dynamic v3 = scope.GetVariable<float>("ErrorRate");
string str = ReadFromStream(ms);
// Python script
import clr
clr.AddReference('System.Data')
from System import Data
from System.Data import DataTable
TW = "Button1"
TotalCnt =0;
ErrorRate = 0.0;
Error =0;
# Function definition is here
def GetErrorRate(erate,total):
ErrorRate = float( erate / TotalCnt )*100
print("Error rate - ",float( erate / TotalCnt )*100);
return;
for row in dt.Rows:
if TW == row[3]:
print("TotalCnt - ",TotalCnt)
elif row[3]=="X":
TotalCnt = TotalCnt +1
elif row[3]=="Y":
TotalCnt = TotalCnt +1
elif row[3]=="Z":
TotalCnt = TotalCnt +1
elif row[3]==" Wire":
print()
else:
TotalCnt = TotalCnt +1
Error = Error +1
GetErrorRate(Error,TotalCnt)
真的不知道这个问题可能是什么原因。
答案 0 :(得分:1)
如PM 2Ring所示,您可能正在进行整数除法。这意味着数字的任何小数部分都将被丢弃。现在你告诉我们的结果应该是37.55
。为此,您将乘以100
,因此erate / TotalCnt
的结果应为0.3755
。如果这是一个整数除法,那么结果将是0
。然后,您使用0
构造函数将此0.0
转换为float
,再乘以100
,然后得到结果0.0
。
此解决方案非常简单,只需使用TotalCnt = 0.0
代替TotalCnt =0;
即可。这将使TotalCnt
变量float
从开始,您将在每次使用它时执行浮点运算。
PS:您不需要在python语句之后使用分号;