Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

digit Check calculation - for XD01/XD02 - Urgent requirment

Former Member
0 Kudos

Hi Experts,

below is my requirment.

IF have like 5 digit number 12356 (Customer number)

(here 6 is units, 5 is ten, 3 is hundred, 2 is thousand and 1 is ten thousands).

My caliculation is i have multiply this number in 2 or 1 like 2 is unit, 1 is ten,

2 is hundreds and 1 is thousands 2 is ten thousands .... and so on....

1 2 3 5 6

2 1 2 1 2 by multiply

-


2 2 6 5 12

now i have to add : 2 + 2 + 6 + 5 + 12 = 27

after 27 next 10 multiply number is 30

here 30 -27 = 3 is my final result

if the final added value is 32 next 10 multiply number is 40 40-32 =8 final value

if the final added value is 85 next 10 multiply number is 90 90-85 = 5 final value.

I need this logic, pls can any one help in this regards

Thanks in advance

Rams

P.S: full points will be awarded

Message was edited by:

ramesh

Message was edited by:

ramesh

Message was edited by:

ramesh

Message was edited by:

ramesh

8 REPLIES 8

Former Member
0 Kudos

Hi,

do 5 times.

x = 0.

tmp1 = number mod 10.

tmp2=number div 10.

if x mod 2 = 0.

tmp1 = tmp1*2.

else.

tmp1=tmp1*1.

endif.

sum = sum+tmp1.

enddo.

pre=sum mod 10.

final=10-pre.

Required value is final.

I have not checked it here. But this should solve ur problem with small changes.

Regards,

Subbu

Former Member
0 Kudos

Hi Ramesh

    • draft code

    • assumptions : KUNNR is always 10 char

REPORT YTEST67 .

data: v_kunnr type kunnr value '12356'.

data: v_kunnr1 type char10.

data: v_template type char10 value '1212121212'.

data: v_var1 type i,

v_var2 type i,

v_var3 type i.

data: cnt type i.

unpack v_kunnr to v_kunnr1.

do 10 times.

v_var1 = v_kunnr1+cnt(1).

v_var2 = v_template+cnt(1).

cnt = cnt + 1.

v_var3 = ( v_var1 * v_var2 ) + v_var3.

enddo.

clear v_var2.

if v_var3 > 100.

v_var2 = 10 - ( ( v_var3 mod 100 ) mod 10 ) .

else.

v_var2 = 10 - ( v_var3 mod 10 ) .

endif.

write v_var2.

Regards

Arun

0 Kudos

Hi Arun,

You logic is very useful for me, but number :1040289 and 1100008 not give correct value, pls have a look.

Thanks

Rams

0 Kudos

Hi Ramesh

Replace the last part by

IF v_var3 > 100.

v_var1 = ( ( v_var3 MOD 100 ) MOD 10 ).

IF v_var1 EQ 0.

v_var2 = 0.

ELSE.

v_var2 = 10 - v_var1 .

ENDIF.

ELSE.

v_var1 = ( v_var3 MOD 10 ).

IF v_var1 EQ 0.

v_var2 = 0.

ELSE.

v_var2 = 10 - v_var1 .

ENDIF.

ENDIF.

WRITE v_var2.

It is working for the second case now it should work for the first case also.

Regards

Arun

0 Kudos

Hi Arun,

Same result, can you pls give me some idea.

orginal Exp values

value

1040289 9

1100000 7

1100001 5

1100002 3

1100003 1

1100004 9

1100005 6

1100007 2

1100008 0

1100009 8

1100010 6

1100011 4

1100012 2

1100013 0

1100014 8

1100015 5

1100016 3

1100017 1

1100018 9

1100019 7

1100021 3

1100022 1

1100023 9

1100024 7

1100025 4

1100026 2

1100027 0

1100059 3

1100060 1

1100061 9

1100062 7

Thanks in advance

Rams

0 Kudos

Hi Ramesh

It seems to be working for all the cases , please let me know specifically which case is failing...

>>>>

REPORT ytest67 .

DATA: v_kunnr TYPE kunnr VALUE '1100000'.

DATA: v_kunnr1 TYPE char10.

DATA: v_template TYPE char10 VALUE '1212121212'.

DATA: v_var1 TYPE i,

v_var2 TYPE i,

v_var3 TYPE i.

DATA: cnt TYPE i.

UNPACK v_kunnr TO v_kunnr1.

DO 10 TIMES.

v_var1 = v_kunnr1+cnt(1).

v_var2 = v_template+cnt(1).

cnt = cnt + 1.

v_var3 = ( v_var1 * v_var2 ) + v_var3.

ENDDO.

CLEAR v_var2.

IF v_var3 > 100.

v_var1 = ( ( v_var3 MOD 100 ) MOD 10 ).

IF v_var1 EQ 0.

v_var2 = 0.

ELSE.

v_var2 = 10 - v_var1 .

ENDIF.

ELSE.

v_var1 = ( v_var3 MOD 10 ).

IF v_var1 EQ 0.

v_var2 = 0.

ELSE.

v_var2 = 10 - v_var1 .

ENDIF.

ENDIF.

WRITE v_var2.

Regards,

Arun

Former Member
0 Kudos

Hi,

Try this.

REPORT ztest_digit_calc.

DATA: num1(10) TYPE c VALUE '1235678',

num2(10) TYPE c,

x TYPE i,

y TYPE i,

num3(10) TYPE c,

num4(10) TYPE c.

DATA: BEGIN OF t_digit,

num TYPE i,

num1 TYPE i,

END OF t_digit.

DATA:lt_digit LIKE TABLE OF t_digit,

wa_digit LIKE LINE OF lt_digit.

x = STRLEN( num1 ).

y = x.

DO x TIMES.

x = x - 1.

num2 = num1+x(1).

wa_digit-num = num2.

APPEND wa_digit TO lt_digit.

ENDDO.

clear x.

LOOP AT lt_digit INTO wa_digit.

y = sy-tabix MOD 2.

IF y NE 0.

num2 = wa_digit-num * 2.

ELSE.

num2 = wa_digit-num * 1.

ENDIF.

num3 = num3 + num2.

ENDLOOP.

num4 = num3.

x = num3 mod 10.

while x NE 0.

num3 = num3 + 1.

x = num3 mod 10.

endwhile.

num3 = num3 - num4.

write : num3.

Reward points if useful.

Regards,

Vimal

0 Kudos

Hi Vimal,

You logic is very useful for me, but some number first one, number not give correct value, pls have a look.

Orginal expected value

number

1040289 9

1100000 7

1100001 5

1100002 3

1100003 1

1100004 9

1100005 6

1100007 2

1100008 0

1100009 8

1100010 6

1100011 4

1100012 2

1100013 0

1100014 8

1100015 5

1100016 3

1100017 1

1100018 9

1100019 7

Thanks in advance