【问题标题】:String is Not Numeric字符串不是数字
【发布时间】:2015-03-27 14:48:01
【问题描述】:

尝试对字段运行 Mod 公式时遇到问题。我不断收到错误“字符串不是数字”,到目前为止,我无法让 ToNumber 正确格式化该字段。该字段是通过添加一个静态值和三个已填充的字段来生成的。任何帮助将不胜感激。


结合字段和填充

StringVar strMICR;
StringVar strMICRLINE;


strMICRLINE := Chr(13) & "0603250694";
strMICRLINE := strMICRLINE & Right("000000" & Trim(Split({CUST.C_ID_ALPHA},"-")[1]),6);
strMICRLINE := strMICRLINE & Right("00000000" & ToText({STMT.STMT_NUMBER},0,""),8);
strMICRLINE := strMICRLINE & Right("0000000000" & Replace(ToText({@Total},2,""),".",""),10);


//Uncomment below to test Mod10 Check-digit
//strMICR := mod10("0603250694084469108961440000127874");

//IF NumericText (strMICRLINE) 
//THEN ToNumber (strMICRLINE);

Mod10 (strMICRLINE);

MOD10功能

Function (StringVar input_number)

input_number := replace(input_number, " ", "");

numbervar i := length(input_number);
numbervar sum_val := 0;

stringvar position := "odd";

do (
    if position = "odd" then (
        sum_val := sum_val + 3*tonumber(input_number[i]);
        position := "even" )
    else (
        sum_val := sum_val + tonumber(input_number[i]);
        position := "odd" )
    ;

    i := i-1
)  while i > 0;

numbervar remainder_val := Remainder(sum_val, 10);

numbervar check_digit := if remainder_val = 0 then 0 else (10-remainder_val) ;

input_number + ToText(check_digit, 0)

【问题讨论】:

    标签: crystal-reports padding micr


    【解决方案1】:

    您正尝试在非数字字符串上调用toNumber(),因此无法转换。您需要先从字符串中删除所有非数字字符。

    //Formula sample to strip non-numeric characters
    local stringvar input := "78906-adf0asdf-234";
    local stringvar output;
    local numbervar i;
    
    for i:=1 to length(input) do
      if numerictext(input[i]) then output:=output&input[i];
    
    output
    

    那么我强烈建议你使用内置的mod 函数而不是自己滚动。

    toNumber({@NumericTextOnly}) mod 10
    

    【讨论】:

    • 我不明白的是输入的字符串是数字。我可以看到当它出错时,它在 MOD10 函数中的 input_number 值为“0603250694001002000000120000004875”。所以我不明白为什么 toNumber 不起作用。
    • 你怎么知道这是导致错误的值?我刚试过;您的函数适用于该值。问题是报告只是在某个时候将一个非数字字符串传递给该函数,而该函数没有优雅地处理它。
    • 请记住,不可打印的字符和空白字符(包括chr(13))也会导致错误。
    猜你喜欢
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2019-11-21
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多