Skip to content

parser/unparser: emit valid CEL for doubles in scientific notation - #1326

Merged
jnthntatum merged 1 commit into
cel-expr:masterfrom
moraneus:fix/unparser-scientific-notation
May 21, 2026
Merged

parser/unparser: emit valid CEL for doubles in scientific notation#1326
jnthntatum merged 1 commit into
cel-expr:masterfrom
moraneus:fix/unparser-scientific-notation

Conversation

@moraneus

Copy link
Copy Markdown
Contributor

strconv.FormatFloat with 'g' and precision -1 emits scientific notation for doubles of magnitude < 1e-4 or >= 1e+21 (e.g. "1e-05", "1e+30"). The previous guard appended ".0" whenever the formatted string lacked a "." so that the literal would parse as a double rather than an int — but scientific notation already produces a valid double literal, so appending ".0" produced invalid output like "1e-05.0" that the parser rejects.

Treat the exponent marker 'e'/'E' as also indicating a valid double literal, only appending ".0" when neither "." nor "e"/"E" is present.

Adds regression test cases covering small/large magnitudes, negative exponents, and uppercase 'E'.

Fixes #1325

Pull Requests Guidelines

See CONTRIBUTING.md for more details about when to create
a GitHub Pull Request and when other kinds of contributions or
consultation might be more desirable.

When creating a new pull request, please fork the repo and work within a
development branch.

Commit Messages

  • Most changes should be accompanied by tests.
  • Commit messages should explain why the changes were made.
Summary of change in 50 characters or less

Background on why the change is being made with additional detail on
consequences of the changes elsewhere in the code or to the general
functionality of the library. Multiple paragraphs may be used, but
please keep lines to 72 characters or less.

Reviews

  • Perform a self-review.
  • Make sure the Travis CI build passes.
  • Assign a reviewer once both the above have been completed.

Merging

  • If a CEL maintaner approves the change, it may be merged by the author if
    they have write access. Otherwise, the change will be merged by a maintainer.
  • Multiple commits should be squashed before merging.
  • Please append the line closes #<issue-num>: description in the merge message,
    if applicable.

strconv.FormatFloat with 'g' and precision -1 emits scientific
notation for doubles of magnitude < 1e-4 or >= 1e+21 (e.g. "1e-05",
"1e+30"). The previous guard appended ".0" whenever the formatted
string lacked a "." so that the literal would parse as a double
rather than an int — but scientific notation already produces a
valid double literal, so appending ".0" produced invalid output
like "1e-05.0" that the parser rejects.

Treat the exponent marker 'e'/'E' as also indicating a valid double
literal, only appending ".0" when neither "." nor "e"/"E" is
present.

Adds regression test cases covering small/large magnitudes,
negative exponents, and uppercase 'E'.

Fixes cel-expr#1325
@google-cla

google-cla Bot commented May 21, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@jnthntatum

Copy link
Copy Markdown
Collaborator

/gcbrun

@jnthntatum
jnthntatum self-requested a review May 21, 2026 19:05
@jnthntatum
jnthntatum merged commit 7b03f12 into cel-expr:master May 21, 2026
7 checks passed
@jnthntatum

Copy link
Copy Markdown
Collaborator

@moraneus thanks for the fix!

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.

parser/unparser: AstToString produces unparseable output for doubles in scientific notation

2 participants