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