/// <summary> /// Changes the length of the arc selected in a ComboBox to a value in a TextBox /// </summary> private void OkWeight_Click(object sender, EventArgs e) { ArcLength.Text = ArcLength.Text.Trim(' '); if (string.IsNullOrEmpty(ArcName.Text)) { MessageBox.Show(@"Please, select an edge", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var selectedArc = ArcName.Items.IndexOf(ArcName.Text); if (selectedArc == -1) { MessageBox.Show(@"The edge doesn't exist", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } try { var length = new MathParserTK.MathParser().Parse(ArcLength.Text); var command = new ChangeArcLengthCommand(digraph, selectedArc, digraph.Arcs[selectedArc].Length, length); command.Executed += (s, ea) => GridAdjacencyMatrix[digraph.Arcs[selectedArc].EndVertex, digraph.Arcs[selectedArc].StartVertex].Value = s; commandsManager.Execute(command); ArcLength.Text = length.ToString(CultureInfo.CurrentCulture); } catch (Exception) { MessageBox.Show(@"Invalid value. Make sure the input value is greater than zero and is the correct mathematical expression.", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public static double ParseMath(string formula) { double result = 0; MathParserTK.MathParser parser = new MathParserTK.MathParser(); try { result = parser.Parse(formula, false); } catch { throw; } return(result); }
/// <summary> /// 显示TPN项目图表 /// </summary> private void showChart() { chrtDrug.Series["Series1"].Points.Clear(); chrtParam.Series["Series1"].Points.Clear(); if ("tpnitem.1".Equals(this.itemCode)) //容积 { showCapacityChart(); return; } else if (5 >= lvDrugs.Columns.Count) { return; } string text = ""; string unit = ""; int p = 0; List <double> yValues = new List <double>(); List <string> xValues = new List <string>(); ListViewItem item = null; MathParserTK.MathParser parser = new MathParserTK.MathParser(); string express = ""; string tmpExp = ""; int hadVal = 0; p = lblExpress.Text.IndexOf("\r\n"); if (0 < p && express.Contains("[")) { express = lblExpress.Text.Substring(0, p); } else { express = "0"; } //药品贡献率 for (int i = 0; i < lvDrugs.Items.Count - 3; i++) { tmpExp = express; hadVal = 0; for (int j = 5; j < lvDrugs.Columns.Count; j++) { text = lvDrugs.Items[i].SubItems[j].Text; if (!string.IsNullOrWhiteSpace(text) && !"-".Equals(text)) { p = text.LastIndexOf(' '); if (0 < p) { unit = text.Substring(p + 1); text = text.Substring(0, p); hadVal++; } else { text = "0"; } } else { text = "0"; } if ("0".Equals(express)) { tmpExp += "+" + text; } else { tmpExp = tmpExp.Replace("[" + lvDrugs.Columns[j].Text + "]", text); } } if (0 < hadVal) { yValues.Add(Convert.ToDouble(parser.Parse(tmpExp))); xValues.Add(getDrugShortName(lvDrugs.Items[i].Text)); } } showSerie(chrtDrug, xValues, yValues, unit); yValues.Clear(); xValues.Clear(); //参数贡献率 double val = 0; item = lvDrugs.Items[lvDrugs.Items.Count - 2]; //合计行 for (int i = 5; i < lvDrugs.Columns.Count; i++) { text = item.SubItems[i].Text; p = text.LastIndexOf(' '); if (0 < p) { unit = text.Substring(p + 1); val = Convert.ToDouble(text.Substring(0, p)); } else { val = 0; } if (0 < val) { yValues.Add(val); text = getDrugShortName(lvDrugs.Columns[i].Text); if (string.IsNullOrWhiteSpace(text)) { xValues.Add(lvDrugs.Columns[i].Text); } else { xValues.Add(text); } } } showSerie(chrtParam, xValues, yValues, unit); }
/// <summary> /// 计算单个TPN项目值 /// </summary> /// <param name="_ordersVal"></param> /// <param name="_prepQuantity"></param> /// <param name="_itemCode">要计算的TPN项目编码, null时计算全部</param> /// <returns></returns> public bool Calculate(Dictionary <string, double> _ordersVal, Dictionary <int, RecipePrep> _prepQuantity, string _itemCode) { if ((null == _ordersVal) || (null == _prepQuantity)) { this.Error = "未指定计算参数"; return(false); } if ((null == this.tblTPNItem) || (0 == this.tblTPNItem.Rows.Count)) { this.Error = "没有可计算的TPN项目"; return(false); } foreach (DataRow row in this.tblTPNItem.Rows) { row["Value"] = 0.0; row["Result"] = ""; row["Lock"] = false; row["IsCal"] = false; } this.ordersVal = _ordersVal; this.prepInfo = _prepQuantity; string newPrepIDs = ""; //检查制剂是否存在 if (null != this.tblPrepThing) { foreach (int prepID in this.prepInfo.Keys) { if (!this.hadInitPrepIDs.Contains("," + prepID.ToString() + ",")) { newPrepIDs += prepID.ToString() + ","; } } } else { foreach (int prepID in this.prepInfo.Keys) { newPrepIDs += prepID.ToString() + ","; } } if (!string.IsNullOrWhiteSpace(newPrepIDs)) { if (!loadPrepThing(newPrepIDs)) { return(false); } } //计算 if (null == this.parser) { this.parser = new MathParserTK.MathParser(); } this.Error = ""; if (null == _itemCode) { foreach (DataRow row in this.tblTPNItem.Rows) { CalculateItem(row); } } else { DataRow row = this.tblTPNItem.Rows.Find(_itemCode); if (null == row) { this.Error = "未找到此编码(" + _itemCode + ")对应的项目"; return(false); } else { CalculateItem(row); } } return(true); }