Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Packed/zoned decimals not working correctly #24

Closed
kadler opened this issue Feb 27, 2018 · 7 comments
Closed

Packed/zoned decimals not working correctly #24

kadler opened this issue Feb 27, 2018 · 7 comments
Labels
bug Something isn't working major

Comments

@kadler
Copy link
Owner

kadler commented Feb 27, 2018

Original report by Teemu Halmela (Bitbucket: teemu_, GitHub: Unknown).


Decimal aren't working as expected with packed and zoned numbers. If I give number 100 to 5p2 it becomes 1.00 when parsed.

I made some tests for this problem.

$ ./test1000_sql400json32 ../json/j0030_decimal_numbers1                                                                                                       
input(5000000):                                                                                                                                                                    
{"pgm":[{"name":"DECIMALS",  "lib":"DB2JSON"},
    {"s":[
        {"name":"afloat",     "type":"4f2",   "value":1000},
        {"name":"adouble",    "type":"8f3",   "value":1000},
        {"name":"apacked",    "type":"12p2",  "value":1000},
        {"name":"azoned",     "type":"12s2",  "value":1000}
    ]}
]}

output(118):
{"script":[{"pgm":["DECIMALS","DB2JSON",{"afloat":1000.00},{"adouble":1000.000},{"apacked":10.00},{"azoned":10.00}]}]}

result:
fail missing ("apacked":1000.00)
fail (-1)
@kadler
Copy link
Owner Author

kadler commented Feb 27, 2018

Original comment by Tony Cairns (Bitbucket: rangercairns, GitHub: rangercairns).


Ok, I have a fix seems to work for packed and zoned. Thanks.

  • Yips Super Driver - test driver - 1.1.4-sg4 toolkit - Packed/zoned decimals not working correctly (Halmela)
#!bash

bash-4.3$ ./test1000_sql400json32 ../json/j08324_srvpgm_value_rainpack24-2_mix_decimal
input(5000000):
{"pgm":[{"name":"RAINSRV", "lib":"DB2JSON", "func":"RAINPACK24"},
        {"s":[{"name":"a1", "type":"24p2", "value":11., "by":"val"},
              {"name":"a2", "type":"24p2", "value":22.0, "by":"val"},
              {"name":"a3", "type":"24p2", "value":33.30, "by":"val"},
              {"name":"a4", "type":"24p2", "value":44.04, "by":"val"},
              {"name":"o1", "type":"24p2", "value":55.55},
              {"name":"o2", "type":"24p2", "value":66.66},
              {"name":"o3", "type":"24p2", "value":77.77},
              {"name":"o4", "type":"24p2", "value":88.88}
             ]}
       ]}


output(159):
{"script":[{"pgm":["RAINSRV","DB2JSON","RAINPACK24",{"a1":11.00},{"a2":22.00},{"a3":33.30},{"a4":44.04},{"o1":11.00},{"o2":22.00},{"o3":33.30},{"o4":44.04}]}]}

result:
success (0)

@kadler
Copy link
Owner Author

kadler commented Feb 28, 2018

Original comment by Teemu Halmela (Bitbucket: teemu_, GitHub: Unknown).


Thanks, almost there.

When giving too many decimals it still breaks.

$ ./test1000_sql400json64 ../json/j0033_decimal_numbers4                                                                                                       
input(5000000):                                                                                                                                                                    
{"pgm":[{"name":"DECIMALS",  "lib":"DB2JSON"},
    {"s":[
        {"name":"afloat",     "type":"4f2",   "value":1000.000},
        {"name":"adouble",    "type":"8f3",   "value":1000.0000},
        {"name":"apacked",    "type":"12p2",  "value":1000.000},
        {"name":"azoned",     "type":"12s2",  "value":1000.000}
    ]}
]}

output(124):
{"script":[{"pgm":["DECIMALS","DB2JSON",{"afloat":1000.00},{"adouble":1000.000},{"apacked":10000.00},{"azoned":10000.00}]}]}

result:
fail missing ("apacked":1000.00)
fail (-1)

@kadler
Copy link
Owner Author

kadler commented Feb 28, 2018

Original comment by Tony Cairns (Bitbucket: rangercairns, GitHub: rangercairns).


Ok, try again. Thanks.

  • [Link Text](Link URL) - test driver - 1.1.4-sg8 toolkit - more packed and zoned too large input (Halmela)

Side note ...

I could not decide extra digits past max scale should round up. Anyway, I just truncated anything past field scale size.

  • "value":12.49999 == truncates 12.49 (12p2 or 12s2).

Opinion?

@kadler
Copy link
Owner Author

kadler commented Mar 1, 2018

Original comment by Teemu Halmela (Bitbucket: teemu_, GitHub: Unknown).


This looks good.

I'm fine with truncation. Maybe a note should be added to the readme about this behavior.

@kadler
Copy link
Owner Author

kadler commented Mar 5, 2018

Original comment by Tony Cairns (Bitbucket: rangercairns, GitHub: rangercairns).


round

Mm ... add round to avoid note about truncation behaviour (coin flip). Only one place in source (PaseToIle.c), can be easily removed, should rounding prove unpopular or defective.

  • Yips Super Driver - test driver - 1.1.4-sg10 - toolkit - added input round packed/zoned
#!bash

bash-4.3$ ./test1000_sql400json32 ../json/j08324_srvpgm_value_rainpack24-2_mix_decimal 
input(5000000):
{"pgm":[{"name":"RAINSRV", "lib":"DB2JSON", "func":"RAINPACK24"},
        {"s":[{"name":"a1", "type":"24p2", "value":11., "by":"val"},
              {"name":"a2", "type":"24p2", "value":00000000000000000000000022.0, "by":"val"},
              {"name":"a3", "type":"24p2", "value":12345678912345678912345678933.309999999999, "by":"val"},
              {"name":"a4", "type":"24p2", "value":44.040, "by":"val"},
              {"name":"o1", "type":"24p2", "value":55.55},
              {"name":"o2", "type":"24p2", "value":66.66},
              {"name":"o3", "type":"24p2", "value":77.77},
              {"name":"o4", "type":"24p2", "value":88.88}
             ]}
       ]}


output(199):
{"script":[{"pgm":["RAINSRV","DB2JSON","RAINPACK24",
{"a1":11.00},{"a2":22.00},
{"a3":8912345678912345678933.31},
{"a4":44.04},{"o1":11.00},{"o2":22.00},
{"o3":8912345678912345678933.31},
{"o4":44.04}]}]}

result:
success (0)

@kadler
Copy link
Owner Author

kadler commented Mar 6, 2018

Original comment by Tony Cairns (Bitbucket: rangercairns, GitHub: rangercairns).


Are we done with this issue? We still pondering more fate of packed and zoned decimal round vs. truncation?

@kadler
Copy link
Owner Author

kadler commented Mar 8, 2018

Original comment by Teemu Halmela (Bitbucket: teemu_, GitHub: Unknown).


This is done.

@kadler kadler closed this as completed Mar 8, 2018
@kadler kadler added major bug Something isn't working labels Jan 24, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working major
Projects
None yet
Development

No branches or pull requests

1 participant