Maybe there is an error on this?

Alain Siverly <[email protected]>
Newsgroups gmane.comp.lang.4gl.aubit.general
Message-ID <[email protected]>
Hello,

in the attachement we show an example where a DECIMAL(16) variable
rounds reduces the decimal numbers to 2 digits internally. 4js uses
internally all digits but shows only 2. Also Informix seems to act
the same way as we found in the I-4GL manual:

"For DECIMAL(p,0) data types, any significant
digits

(within the declared precision) in the fractional part of a data
value are stored

internally, but are not displayed. For example, if a data value of
0.25 is stored

in the DECIMAL(25,0) variable Q, the value of Q is displayed as
zero, but the

Boolean expression (Q > 0) evaluates as TRUE."

If this is an error, could it be possible to get a correction on
A4GL?

Thanks in advance!

Cheers

Alain

VENTAS AG

------------------------------------------------------------------------------
Sponsored by Intel(R) XDK 
Develop, test and display web and hybrid apps with a single code base.
Download it for free now!
http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk

_______________________________________________
Aubit4gl-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/aubit4gl-discuss
rundung.4gl (text/plain, 5.6 KB)
#########################################################
# ------------------ OUTPUT 4JS ------------------------#
#########################################################
# Example      1:                            
# divident in MAIN:                      32,0000000000000
# divisor  in MAIN:                     238,0000000000000
# --------------- START FUNCTION devision ---------------
# divident in division():                32,0000000000000
# divisor  in division():               238,0000000000000
# l_decimal16 = divident / divisor      0,134453781512605 (!!!)
# ---------------- END FUNCTION devision ----------------
# return_value [DECIMAL(16)]            0,134453781512605 (!!!)
# decimal16_6 = return_value * divisor:  32,0000000000000
# decimal_16_6 = divident:               32,0000000000000 =  32,0000000000000
#########################################################
# Example      2:                            
# divident in MAIN:                      32,0000000000000
# divisor  in MAIN:                     235,0000000000000
# --------------- START FUNCTION devision ---------------
# divident in division():                32,0000000000000
# divisor  in division():               235,0000000000000
# l_decimal16 = divident / divisor      0,136170212765957 (!!!)
# ---------------- END FUNCTION devision ----------------
# return_value [DECIMAL(16)]            0,136170212765957 (!!!)
# decimal16_6 = return_value * divisor:  32,0000000000000
# decimal_16_6 = divident:               32,0000000000000 =  32,0000000000000
#########################################################

#########################################################
# ------------------ OUTPUT A4GL -----------------------#
#########################################################
# Example      1:                            
# divident in MAIN:                      32,0000000000000
# divisor  in MAIN:                     238,0000000000000
# --------------- START FUNCTION devision ---------------
# divident in division():                32,0000000000000
# divisor  in division():               238,0000000000000
# l_decimal16 = divident / divisor      0,130000000000000 (!!!)
# ---------------- END FUNCTION devision ----------------
# return_value [DECIMAL(16)]            0,130000000000000 (!!!)
# decimal16_6 = return_value * divisor:  30,9400000000000
# decimal_16_6 < divident:               30,9400000000000 <  32,0000000000000
#########################################################
# Example      2:                            
# divident in MAIN:                      32,0000000000000
# divisor  in MAIN:                     235,0000000000000
# --------------- START FUNCTION devision ---------------
# divident in division():                32,0000000000000
# divisor  in division():               235,0000000000000
# l_decimal16 = divident / divisor      0,140000000000000 (!!!)
# ---------------- END FUNCTION devision ----------------
# return_value [DECIMAL(16)]            0,140000000000000 (!!!)
# decimal16_6 = return_value * divisor:  32,9000000000000
# decimal_16_6 > divident:               32,9000000000000 >  32,0000000000000
#########################################################

MAIN

DEFINE decimal16_6  DECIMAL(16,6)
DEFINE divident     DECIMAL(16)
DEFINE divisor      DECIMAL(16)
DEFINE return_value DECIMAL(16)
DEFINE i            SMALLINT

FOR i = 1 TO 2
   IF i = 1
      THEN LET divident = 32
           LET divisor  = 238
      ELSE LET divident = 32
           LET divisor  = 235
   END IF

# --- Example 1: 32 / 238
# --- Example 2: 32 / 235
   DISPLAY "#######################################################"
   DISPLAY "Example ", i, ":                            "

   DISPLAY "divident in MAIN:                     ", divident USING "##&.#############"
   DISPLAY "divisor  in MAIN:                     ", divisor  USING "##&.#############"

   CALL division(divident, divisor)
      RETURNING return_value

   DISPLAY "return_value [DECIMAL(16)]            ", return_value  USING "&.###############"

# --- 
   LET decimal16_6 = return_value * divisor

   DISPLAY "decimal16_6 = return_value * divisor: ", decimal16_6  USING "##&.#############"

   CASE
      WHEN decimal16_6 = divident
         DISPLAY "decimal_16_6 = divident:              ", 
                 decimal16_6 USING "##&.#############" , " = ", 
                 divident    USING "##&.#############"

      WHEN decimal16_6 < divident
         DISPLAY "decimal_16_6 < divident:              ", 
                 decimal16_6 USING "##&.#############" , " < ", 
                 divident    USING "##&.#############"

      WHEN decimal16_6 > divident
         DISPLAY "decimal_16_6 > divident:              ", 
                 decimal16_6 USING "##&.#############" , " > ", 
                 divident    USING "##&.#############"
   END CASE
END FOR

END MAIN

# ----------------------------------------------------------------------------------------
# FUNCTION division(divident, divisor)
# ----------------------------------------------------------------------------------------

FUNCTION division(divident, divisor)

DEFINE divident    DECIMAL(16)
DEFINE divisor     DECIMAL(16)
DEFINE l_decimal16 DECIMAL(16)

DISPLAY "--------------- start FUNCTION devision ---------------"
DISPLAY "divident in division():               ", divident USING "##&.#############"
DISPLAY "divisor  in division():               ", divisor  USING "##&.#############"

LET l_decimal16 = divident / divisor

DISPLAY "l_decimal16 = divident / divisor      ", l_decimal16 USING "&.###############"
DISPLAY "---------------- end FUNCTION devision ----------------"

RETURN l_decimal16

END FUNCTION
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.