2009 Aug 13 12:14 PM
Hi all,
i am facing problem with Trancation of Type P value
I have P type variable V1 with Lenght 30 decimal 14.
So i am geting value like 444.99999988
i Have another P type variable V2 with lenght 13 decial 2.
I need to populate variable V2 with value of V1 like 444.99...Means i need to trancate value after decimal with 2 places.
Let me know how to achive this .
Thanks in advance,
regards,
JBR
2009 Aug 13 12:18 PM
Hi
You can use ROUND off addtion if you want to round off the value of V1.
Or else it check this example taken from sap help.
DATA pack TYPE p LENGTH 8 DECIMALS 4 VALUE '1234.5678'.
WRITE pack NO-GROUPING DECIMALS 2
o/p 1234,57
Thanks
Viquar Iqbal
Hi
You can use ROUND off addtion if you want to round off the value of V1.
Or else it check this example taken from sap help.
DATA pack TYPE p LENGTH 8 DECIMALS 4 VALUE '1234.5678'.
WRITE pack NO-GROUPING DECIMALS 2
o/p 1234,57
Thanks
Viquar Iqbal
2009 Aug 13 12:18 PM
Hi
You can use ROUND off addtion if you want to round off the value of V1.
Or else it check this example taken from sap help.
DATA pack TYPE p LENGTH 8 DECIMALS 4 VALUE '1234.5678'.
WRITE pack NO-GROUPING DECIMALS 2
o/p 1234,57
Thanks
Viquar Iqbal
2009 Aug 13 12:36 PM
Hi,
Thanks for quick replay,
data : V1 type P lenght 30 decimal 14,
V2 type p lenght 13 deciamls 2.
The values of V1 comes like
V1 = 44449.99988 and 0.99988 and 9.9998888 and 1.23678 0.99887.
The result value we are expecting from v1 like
V2 = 44449.99 and 0.99 and 9.99 and 1.23 , 0.99.
Let me know how can i achive exact V2 values from V1 values .
thanks &Reagrds,
JBR
2009 Aug 13 12:49 PM
All you need is to subtract value 0.005 so round will work fine in all cases either over 5 (which rounds to next full value or below 5 which rounds to floor full value)
I.e. value 44449.99988 - 0.005 = 4449.99488 -> will round down to 44449.99000 -> after decimals will be truncated the value is 4449.99
the same applies if third place is below 5
i.e. value 1.23278 - 0.005 = 1.22878 -> will round up to 1.2300 -> decimals will be truncated so you have 1.23
v1 = '44449.99988'.
v2 = v1 - '0.005' .
WRITE: / v1, v2.
v1 = '0.99988'.
v2 = v1 - '0.005' .
WRITE: / v1, v2.
v1 = '9.9998888'.
v2 = v1 - '0.005' .
WRITE: / v1, v2.
v1 = '1.23678'.
v2 = v1 - '0.005' .
WRITE: / v1, v2.
v1 = '0.99887'.
v2 = v1 - '0.005' .
WRITE: / v1, v2.
Btw. Length 30 for P is not allowed. 16 is the max.
Regards
Marcin
Tested, works fine.
Edited by: Marcin Pciak on Aug 13, 2009 1:49 PM
2009 Aug 13 12:51 PM
Hi,
One way is to move the value to type c variable and split and concatenate with offsets.
data : V1(16) type P decimals 14,
V2(16) type c,
V3(13) type c,
a(10) type c,
b(10) type c.
v1 = '44449.99988'.
v2 = v1.
split v2 at '.' into a b.
concatenate a '.' b+0(2) into v3.
write v3.
Also note that the maximum length that can be used for type p is 16 for the whole value
Regards,
Vik
2009 Aug 13 1:39 PM
Hi,
Thanks for replay
the V1 values are not same always.
please see below code :
I am using this BAPI for geting all the characteristics for DENSITY
CALL FUNCTION 'BAPI_BUS1077_GETDETAIL'
EXPORTING
scenario = '01'
key_date = sy-datum
flg_prop_data = 'X'
TABLES
return = l_it_return
sub_header = l_it_sub_header
prop_header = l_it_prop_header
prop_data = l_it_prop_data.
Now i Have data l_it_prop_data .
Here the density charactestics values are FLOAT type
READ TABLE l_it_prop_data INTO l_wa_prop_data
WITH KEY recno_root = l_wa_estmj-recnroot
name_char = 'SAP_EHS_1013_005_VALUE'.
IF sy-subrc IS INITIAL.
CALL FUNCTION 'MD_CONV_QUANTITY_FLOAT_TO_PACK'
EXPORTING
iv_menge = l_wa_prop_data-num_val_fm
IMPORTING
EV_MENGE = l_v_dummy.
endif.
l_v_Dummy has type P value lenght 30decimals.
Now using this value, i need to populate P type variable lenght 13 deciamls 2.
Now can i achive this .
Thanks &Regards,
JBR
2009 Aug 13 1:55 PM
the V1 values are not same always.
No one has assumed here that V1 is constant.
Above code works fine to your requirement. Did you try it at all?
data: f_input type f VALUE '54565464.656756756', "you can enter any F value
p_output type mdr1menge. "your type p 30 length dec 14
CALL FUNCTION 'MD_CONV_QUANTITY_FLOAT_TO_PACK'
EXPORTING
iv_menge = f_input
IMPORTING
EV_MENGE = p_output.
data: p_round TYPE p LENGTH 13 DECIMALS 2.
p_round = p_output - '0.005'. "p_round holds what you need now
write: / p_output , p_round.
Regards
Marcin
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |