Skip to content

Conversation

@amoshydra
Copy link
Contributor

@amoshydra amoshydra commented Jan 17, 2025

Moved from jessealama/decimal128#128
commits from jessealama/decimal128#128 are rebased onto the main branch of this repository

A work in-progress draft for fixing round

Todo:

  • create tests for round
  • fix round
    • ceil
    • floor
    • halfExpand
    • halfEven

Summary

pending

Related to

jessealama/decimal128#116

How is this tested?

See updated tests for round

@amoshydra amoshydra changed the title Fix round only Fix round Jan 17, 2025
@amoshydra amoshydra mentioned this pull request Jan 17, 2025
@jessealama jessealama self-assigned this Mar 27, 2025
@jessealama
Copy link
Owner

I believe these have all been fixed now. Can you take a look?

@amoshydra
Copy link
Contributor Author

amoshydra commented May 18, 2025

Thanks a lot, @jessealama!

I've rebased this branch onto the latest commit of the main branch (14f93a9) and run the tests again.

I have verified from the test output that all the rounding issues are resolved.

However, using the round.test.js from this branch, some output is inconsistently represented in exponential notation.

Example:

Expected: "11100000000"
Received: "1.11e+10"

Expected: "0.1000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e-1"

Expected: "-9.99999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e+0"
Click here to see all (256 cases) erroneous output from the test result
Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "11100000000"
Received: "1.11e+10"

Expected: "-11100000000"
Received: "-1.11e+10"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "110000000"
Received: "1.1e+8"

Expected: "-110000000"
Received: "-1.1e+8"

Expected: "0.1000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e-1"

Expected: "-0.1000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "1.000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e+0"

Expected: "-1.000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e+0"

Expected: "1.00000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e+0"

Expected: "-1.00000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e+0"

Expected: "0.100000000000000015"
Received: "1.00000000000000015e-1"

Expected: "-0.100000000000000015"
Received: "-1.00000000000000015e-1"

Expected: "0.10000000000000001"
Received: "1.0000000000000001e-1"

Expected: "-0.10000000000000001"
Received: "-1.0000000000000001e-1"

Expected: "1.00000000000000015"
Received: "1.00000000000000015e+0"

Expected: "-1.00000000000000015"
Received: "-1.00000000000000015e+0"

Expected: "1.0000000000000001"
Received: "1.0000000000000001e+0"

Expected: "-1.0000000000000001"
Received: "-1.0000000000000001e+0"

Expected: "0.1000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e-1"

Expected: "-0.1000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "1.000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e+0"

Expected: "-1.000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e+0"

Expected: "1.00000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e+0"

Expected: "-1.00000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e+0"

Expected: "0.100000000000000015"
Received: "1.00000000000000015e-1"

Expected: "-0.100000000000000015"
Received: "-1.00000000000000015e-1"

Expected: "0.10000000000000001"
Received: "1.0000000000000001e-1"

Expected: "-0.10000000000000001"
Received: "-1.0000000000000001e-1"

Expected: "1.00000000000000015"
Received: "1.00000000000000015e+0"

Expected: "-1.00000000000000015"
Received: "-1.00000000000000015e+0"

Expected: "1.0000000000000001"
Received: "1.0000000000000001e+0"

Expected: "-1.0000000000000001"
Received: "-1.0000000000000001e+0"

Expected: "0.1000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e-1"

Expected: "-0.1000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "1.000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e+0"

Expected: "-1.000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e+0"

Expected: "1.00000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e+0"

Expected: "-1.00000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e+0"

Expected: "0.100000000000000015"
Received: "1.00000000000000015e-1"

Expected: "-0.100000000000000015"
Received: "-1.00000000000000015e-1"

Expected: "0.10000000000000001"
Received: "1.0000000000000001e-1"

Expected: "-0.10000000000000001"
Received: "-1.0000000000000001e-1"

Expected: "1.00000000000000015"
Received: "1.00000000000000015e+0"

Expected: "-1.00000000000000015"
Received: "-1.00000000000000015e+0"

Expected: "1.0000000000000001"
Received: "1.0000000000000001e+0"

Expected: "-1.0000000000000001"
Received: "-1.0000000000000001e+0"

Expected: "0.1000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e-1"

Expected: "-0.1000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "1.000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e+0"

Expected: "-1.000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e+0"

Expected: "1.00000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e+0"

Expected: "-1.00000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e+0"

Expected: "0.100000000000000015"
Received: "1.00000000000000015e-1"

Expected: "-0.100000000000000015"
Received: "-1.00000000000000015e-1"

Expected: "0.10000000000000001"
Received: "1.0000000000000001e-1"

Expected: "-0.10000000000000001"
Received: "-1.0000000000000001e-1"

Expected: "1.00000000000000015"
Received: "1.00000000000000015e+0"

Expected: "-1.00000000000000015"
Received: "-1.00000000000000015e+0"

Expected: "1.0000000000000001"
Received: "1.0000000000000001e+0"

Expected: "-1.0000000000000001"
Received: "-1.0000000000000001e+0"

Expected: "0.1000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e-1"

Expected: "-0.1000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "1.000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e+0"

Expected: "-1.000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e+0"

Expected: "1.00000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e+0"

Expected: "-1.00000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e+0"

Expected: "0.100000000000000015"
Received: "1.00000000000000015e-1"

Expected: "-0.100000000000000015"
Received: "-1.00000000000000015e-1"

Expected: "0.10000000000000001"
Received: "1.0000000000000001e-1"

Expected: "-0.10000000000000001"
Received: "-1.0000000000000001e-1"

Expected: "1.00000000000000015"
Received: "1.00000000000000015e+0"

Expected: "-1.00000000000000015"
Received: "-1.00000000000000015e+0"

Expected: "1.0000000000000001"
Received: "1.0000000000000001e+0"

Expected: "-1.0000000000000001"
Received: "-1.0000000000000001e+0"

Expected: "0.1000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e-1"

Expected: "-0.1000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "1.000000000000000000000000000000015"
Received: "1.000000000000000000000000000000015e+0"

Expected: "-1.000000000000000000000000000000015"
Received: "-1.000000000000000000000000000000015e+0"

Expected: "1.00000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e+0"

Expected: "-1.00000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e+0"

Expected: "0.100000000000000015"
Received: "1.00000000000000015e-1"

Expected: "-0.100000000000000015"
Received: "-1.00000000000000015e-1"

Expected: "0.10000000000000001"
Received: "1.0000000000000001e-1"

Expected: "-0.10000000000000001"
Received: "-1.0000000000000001e-1"

Expected: "1.00000000000000015"
Received: "1.00000000000000015e+0"

Expected: "-1.00000000000000015"
Received: "-1.00000000000000015e+0"

Expected: "1.0000000000000001"
Received: "1.0000000000000001e+0"

Expected: "-1.0000000000000001"
Received: "-1.0000000000000001e+0"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000002"
Received: "1.00000000000000000000000000000002e-1"

Expected: "0.100000000000000000000000000000002"
Received: "1.00000000000000000000000000000002e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000002"
Received: "-1.00000000000000000000000000000002e-1"

Expected: "-0.100000000000000000000000000000002"
Received: "-1.00000000000000000000000000000002e-1"

Expected: "0.999999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e-1"

Expected: "9.99999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e+0"

Expected: "-0.999999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e-1"

Expected: "-9.99999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e+0"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "0.999999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e-1"

Expected: "0.999999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e-1"

Expected: "0.999999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e-1"

Expected: "9.99999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e+0"

Expected: "9.99999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e+0"

Expected: "9.99999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e+0"

Expected: "-0.999999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e-1"

Expected: "-0.999999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e-1"

Expected: "-0.999999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e-1"

Expected: "-9.99999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e+0"

Expected: "-9.99999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e+0"

Expected: "-9.99999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e+0"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000002"
Received: "1.00000000000000000000000000000002e-1"

Expected: "0.100000000000000000000000000000002"
Received: "1.00000000000000000000000000000002e-1"

Expected: "0.100000000000000000000000000000002"
Received: "1.00000000000000000000000000000002e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.999999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e-1"

Expected: "-0.999999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e-1"

Expected: "-0.999999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e-1"

Expected: "-9.99999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e+0"

Expected: "-9.99999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e+0"

Expected: "-9.99999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e+0"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000002"
Received: "-1.00000000000000000000000000000002e-1"

Expected: "-0.100000000000000000000000000000002"
Received: "-1.00000000000000000000000000000002e-1"

Expected: "-0.100000000000000000000000000000002"
Received: "-1.00000000000000000000000000000002e-1"

Expected: "0.999999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e-1"

Expected: "0.999999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e-1"

Expected: "0.999999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e-1"

Expected: "9.99999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e+0"

Expected: "9.99999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e+0"

Expected: "9.99999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e+0"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000002"
Received: "1.00000000000000000000000000000002e-1"

Expected: "0.100000000000000000000000000000002"
Received: "1.00000000000000000000000000000002e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000002"
Received: "-1.00000000000000000000000000000002e-1"

Expected: "-0.100000000000000000000000000000002"
Received: "-1.00000000000000000000000000000002e-1"

Expected: "0.999999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e-1"

Expected: "9.99999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e+0"

Expected: "-0.999999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e-1"

Expected: "-9.99999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e+0"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000001"
Received: "1.00000000000000000000000000000001e-1"

Expected: "0.100000000000000000000000000000002"
Received: "1.00000000000000000000000000000002e-1"

Expected: "0.100000000000000000000000000000002"
Received: "1.00000000000000000000000000000002e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000001"
Received: "-1.00000000000000000000000000000001e-1"

Expected: "-0.100000000000000000000000000000002"
Received: "-1.00000000000000000000000000000002e-1"

Expected: "-0.100000000000000000000000000000002"
Received: "-1.00000000000000000000000000000002e-1"

Expected: "0.999999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e-1"

Expected: "9.99999999999999999999999999999999"
Received: "9.99999999999999999999999999999999e+0"

Expected: "-0.999999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e-1"

Expected: "-9.99999999999999999999999999999999"
Received: "-9.99999999999999999999999999999999e+0"

Reproduce:

  1. from main branch
  2. Use test from https://github.com/amoshydra/proposal-decimal-polyfill/blob/e054405cbc3b96b34f1d50a0a3faa71baf1a24c4/tests/Decimal/round.test.js
  3. npx tsc
    npm run test -- round
    

@jessealama
Copy link
Owner

Thank you! I'll take a look.

@jessealama
Copy link
Owner

I've updated things somewhat, so this rounding behavior should be resolved. Can you take another look?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants