无法从C#windows app中的python脚本获取浮点值

时间:2014-09-10 10:16:51

标签: c# python .net ironpython

我有一个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)

真的不知道这个问题可能是什么原因。

1 个答案:

答案 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语句之后使用分号;