Crystal 报告 - For 循环中的复合总数 - 意外结果

Crystal Reports - Compounding Total in For Loop - Unexpected Results

我已经编码 15 年了,了解多种语言,C#、C++、PHP、PAWN、SMALL、等等。 Crystal 语法可能是我见过的最不一致和最荒谬的。

总之,我想在这里做一些简单的事情。我的数据库中有一个格式如下的字符串: “1-DESC、2-OTHER、5-MISC”

“-”和“,”是我的代码中用于拆分字符串的分隔符。无论如何,我需要添加 1+2+5 以便 CR 报告这些数字的总数。出于某种原因,在遵循代码时,当我应该得到 10 时,我一直得到“30.00”。我无法理解 CR 是如何做到这一点的....

//create an array of strings by parsing a underscore-delimited string field
Stringvar Array strings := Split({Estim.User_Memo1}, ', ');

numbervar i; 
numbervar total = 0;
numbervar total2 = 0;
For i := 1 to count(strings) Do
( 
    If InStr(strings[i], '-') > 0 then 
    (
        Stringvar Array numdesc := Split(strings[i], '-');
        total2 := ToNumber(numdesc[1]);
        total := total + total2;
        //total := total + ToNumber(numdesc[1]);
    );
);

total;

我拉取的数据库输入字符串是:“1-裂头,2-无线,3-O/S 长度,4-U/S 长度”

请原谅我多余的总变量。我一直在尝试寻找解决方法大约一个小时。

感谢您的任何见解。

首先你需要分配你需要使用的值:

现在要检索数字,您可以使用 Val 函数,该函数将从数字格式的字符串中 return 数字,这将使算术运算变得容易。

试试这个...目前我没有 CR 来测试语法..但逻辑是这样的。

//create an array of strings by parsing a underscore-delimited string field
Stringvar Array strings := Split({Estim.User_Memo1}, ', ');

numbervar i; 
numbervar total:= 0;
numbervar total2:= 0;
For i := 1 to count(strings) Do
( 
//    If InStr(strings[i], '-') > 0 then 
  //  (
    //    Stringvar Array numdesc := Split(strings[i], '-');
      //  total2 := ToNumber(numdesc[1]);
        total := total + Val(strings[i]);
        //total := total + ToNumber(numdesc[1]);
  //  );
);

total;

谢谢大家的帮助。 Siva 几乎是对的。出于某种原因,这有效。

//create an array of strings by parsing a underscore-delimited string field
Stringvar Array strings := Split({Estim.User_Memo1}, ', ');

numbervar i:=1;
numbervar total:= 0;

For i := 1 to count(strings) Do
( 
If InStr(strings[i], '-') > 0 then 
(
    Stringvar Array numdesc := Split(strings[i], '-');
    total := total + Val(numdesc[1]);
);
);

total;