| Symptom 
 This consulting note describes a) why certain data fields are displayed differently on screen than they are in the database
 
 
 and
 
 b) which effects the use of fixed point arithmetic has on arithmetic operations.
 
 Other termsSymptom 1:
 If you enter a condition rate for a percentage condition, you can  specify a maximum of three decimal places for the condition rate.  After  you enter a condition rate, it is also displayed on screen as expected  and also used correctly in the pricing results.  However, the condition  rate in the database table in question (or when the field is displayed in debugging mode) seems to be incorrect.
 
 Example:
 You enter a condition rate of '4.2' (for example, for a master data  record or a document condition).  To confirm this entry, you choose  ENTER.  '4.200 %' appears on screen.  If, for example, this condition  record is selected in the KONP (or KONV) table, '42.00', and not '4.200', is displayed in the KBETR field.
 
 Explanation of this behavior:
 See the section entitled 'Reason and Prerequisites' 1./2a./3a.
 
 Symptom 2:
 You enter a condition rate for a currency that does not have two decimal  places (for example, Japanese Yen JPY has 0 decimal places).  After you  enter a condition rate, it is also displayed on screen as expected and  also used correctly in the pricing results.  However, the condition rate  in the database table in question (or when the field is displayed in debugging mode) seems to be incorrect.
 
 Example:
 You enter a condition rate of '75' (for example, for a master data  record or a document condition).  To confirm this entry, you choose  ENTER.  '75 JPY' appears on screen.  If, for example, this condition  record is selected in the KONP (or KONV) table, '00.75', and not '75', is displayed in the KBETR field.
 
 Explanation of this behavior:
 See the section entitled 'Reason and Prerequisites' 1./2a./3b.
 
 Symptom 3:
 In a user-defined report, a WRITE statement is used to display a  condition rate on screen.  The condition rate that is displayed is incorrect.
 
 Example:
 The user expects the system to display a condition rate of '123 JPY',  instead it displays '1.23 JPY'.
 
 Explanation of this behavior:
 See the section entitled 'Reason and Prerequisites' 1./2a./3b./4.
 
 Symptom 4:
 In pricing, the system seems to calculate incorrect values.
 
 Example:
 Sales quantity      3,763 M2
 Condition rate8,42 EUR / 1 KG
 Quantity relation    1000 M2 = 4567 KG
 The user expects a condition value of
 
 3,763 / 1000 * 4567 * 8,42 = 144,7029...
 = 144,70 EUR (rounded)
 
 The system takes account of the decimal places in the quantity fields  and value fields and actually calculates the following condition value in two steps:
 
 Condition basis: 3,763 / 1000 * 4567 = 17,18562...
 = 17,186 KG (rounded)
 Condition value:  17,186 * 8,42 = 144,7061...
 = 144.71 EUR (rounded)
 
 Furthermore, the pricing programs do not use the fixed point arithmetic.
 Explanations for this subject area:
 See the section entitled 'Reason and Prerequisites', in particular 5.
 
 Percent, decimal places, fixed point arithmetic, rounding error,Reason and PrerequisitesPower of ten, 10^N, factor, 10,
 KONV, KONP, CURR, QUAN, DEC, KBETR
 
 This is the standard behavior of the R/3 system: 1. The value fields refer to a data type in the ABAP dictionary and  this data type determines how the content of the value fields is displayed on the database or in debugging mode.
 
 For example, the condition rate in pricing (KONV-KBETR) refers to the  KBETR data element.  In turn, this data element refers to the WERTV6 domain with the following attributes:
 
 
           Data typeCURR
 
           Length    11        Decimal places2
 
 
 Therefore, the condition rate in the KONV database table and in  debugging mode (for example, in the internal table XKOMV) is displayed with two decimal places. 2. The system requires a reference field in order to correctly display  a value field on screen.  The system moves the decimal point to the  correct place, in accordance with the currency specified in the reference field. a) For example, the condition currency is used as a reference currency  for the condition rate.  Therefore, the corresponding currency field  RV61A-KOEI1 is specified as the reference currency in the ABAP dictionary when defining the KONV database table on the 'Currency/Quantity Fields' tab page. b) Alternatively, the document currency VBAP-WAERK is specified as a  reference field for the net value of an order item (table  VBAP, field NETWR). 3. The system always assumes that a currency works with two decimal  places.  If a currency has a different number of decimal places,  maintain it in the TCURX table and specify the number of decimal places: a) For example, this table contains 'Japanese Yen' (JPY) with no  decimal places or 'Tunisian Dinar' (TND) with three decimal places. b) For percentage conditions (currency = '%'), the currency '3' is used  internally as an alternative currency and this currency is also  maintained in the TCURX table with a different number of decimal places (3). 4. If, in a report, a WRITE statement is used to display a value field  and a reference currency is not specified in this case, the system  assumes that there is a standard currency with two decimal places (see  3.).  As part of a WRITE statement, value fields should therefore always  be displayed with the CURRENCY addition, so that they are always displayed correctly.
 
 
 Example:
 
 The program
 
 
         REPORT test_decimal_places.
 
          DATA: kbetr LIKE konv-kbetr VALUE '1.23',
 
               waers LIKE konv-waers.
 
          waers = 'JPY'.
 
         WRITE: kbetr,                waers, /.
 
         WRITE: kbetr CURRENCY waers, waers, /.
 
         waers = 'EUR'.
 
         WRITE : kbetr CURRENCY waers, waers, /.
 
         waers = '%'.
 
          WRITE : kbetr CURRENCY '3',  waers, /.
 
 
 displays the following information:          1,23  JPY
 
                                   123  JPY
 
                                   1,23  EUR
 
                                 0,123  %
 
 not5. The 'fixed point arithmetic' checkbox in the attributes of the SAPLV61A program is 
 not selected, that is, pricing does 
  work with fixed point arithmetic.  In this case, packed numbers (ABAP type p, dictionary types CURR, DEC or QUAN) are  considered as integers the case of assignments, comparisons and  arithmetic operations, regardless of the number of predefined decimal  places for the underlying ABAP dictionary data types.  If an arithmetic  operation (for example, a multiplication) is executed and the outcome of  the operation is used for an assignment, the outcome is adjusted by a  corresponding correction factor to the correct number of decimal places for the result field (see the following example).
 
 
 Example:
 
 The program (without fixed point arithmetic)
 
 
     REPORT arithmetical_operations .
 
     DATA: waers LIKE konv-waers,
 
           kawrt LIKE konv-kawrt,
 
           kbetr LIKE konv-kbetr,
 
           kwert LIKE konv-kwert.
 
     kawrt = '140.52'.
 
     waers = 'EUR'.
 
     WRITE : 'Condition basis', kawrt CURRENCY waers, waers, /.
 
     kbetr = '5.36'.
 
     waers = '%'.
 
     WRITE : 'Condition rate', kbetr CURRENCY '3', waers, /.
 
     WRITE : 'No adjustment takes place ==> Wrong result:', /.
 
     kwert = kawrt * kbetr.
 
     waers = 'EUR'.
 
     WRITE : 'Condition value', kwert CURRENCY waers, waers, /.
 
     WRITE: 'Adjustment takes place ==> Correct result:', /.
 
     kwert = kawrt * kbetr / 1000.
 
     waers = 'EUR'.
 
     WRITE : 'Condition value', kwert CURRENCY waers, waers, /.
 
 
 displays the following information:
 
     Condition basis              140,52  EUR
 
     Condition rate          0,536  %
 
     No adjustment takes place ==> Wrong result:
 
     Condition value        75.318,72  EUR
 
     Adjustment takes place ==> Correct result:
 
     Condition value            75,32  EUR
 
 
 To achieve greater accuracy, deactivate the fixed point arithmetic in pricing (see sections 6 and 7). 6. For the internal display of packed numbers (data type 'p'):
 
 
 Example: a) Declaration of a packed number with four decimal places:
 
 
 DATA: number TYPE p DECIMALS 4.
 
 b) The value "1.2345" is assigned to this number:
 
 
 number = '1.2345'.
 
 c) Internally, however, this value is saved in the form of two integer  values.  In the following section, the integer values are A and B:
 
 A contains the value of the saved number without a period: '12345'
 
 B contains the information about the number of decimal places for the  saved number:  '4' d) This reformatting ensures greater accuracy with arithmetic  operations because interim results do not have to be rounded off (see section 7).
 
 7. Different display for numbers, depending on whether or not fixed point arithmetic is activated:
 
 
 Example:
 
 a) Also, in this example, four numbers of the type p are created again:
 
 
 DATA: number1 TYPE p DECIMALS 4,
 
       number2 TYPE p DECIMALS 4,
 
       number3 TYPE p DECIMALS 4,
 
       number4 TYPE p DECIMALS 4.
 
 b) The following values are assigned to the numbers and then displayed:
 
 
 number1 = 1000.            WRITE: number1, /.
 
 number2 = '1000'.          WRITE: number2, /.
 
 number3 = '1.2345'.        WRITE: number3, /.
 
 number4 = '1.23456'.       WRITE: number4, /.
 
 c) As was explained in section 6, internally all numbers are saved in the form of two integer values (An,Bn). d) The processing result is then as follows: 
Fixed point arithmetic is activated:
 Internal display:   A1 = 10000000  B1 = 4
 A2 = 10000000  B2 = 4
 A3 = 12345     B3 = 4
 A4 = 12346     B3 = 4 (the number was
 rounded off)
 
 Numbers displayed:              1.000,0000
 1.000,0000
 1,2345
 1,2346
 
SolutionFixed point arithmetic is not activated:
 Internal display:   A1 = 12345    B1 = 4
 A2 = 1000     B2 = 4
 A3 = 1000     B3 = 4
 A4 = 123456   B4 = 4
 
 Numbers displayed:                0,1000
 0,1000
 1,2345
 12,3456
 
 Note that this is a consultation note. Further questions about the  subject area described above are not processed by regular support, but by consulting and are subject to separate remuneration.  
 
 |