[ https://issues.apache.org/jira/browse/TINKERPOP-3166?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18003935#comment-18003935 ]
ASF GitHub Bot commented on TINKERPOP-3166: ------------------------------------------- andreachild commented on code in PR #3153: URL: https://github.com/apache/tinkerpop/pull/3153#discussion_r2193657123 ########## docs/src/upgrade/release-3.8.x.asciidoc: ########## @@ -30,6 +30,53 @@ complete list of all the modifications that are part of this release. === Upgrading for Users +==== Number Conversion Step + +We have introduced a number conversion step, `asNumber()`, which converts the incoming traverser to the nearest parsable type if no argument is provided, or to the desired numerical type, based on the number token (`N`) provided. + +Numerical input will pass through unless a type is specified by the number token, with the exception that any float number will be converted into double. `ArithmeticException` will be thrown for any overflow during narrowing of types: + +[source,text] +---- +gremlin> g.inject(5).asNumber() +==> 5 // parses to int +gremlin> g.inject(5.0).asNumber() +==> 5 // parses to double +gremlin> g.inject(5.123f).asNumber() +==> 5.123 // will cast float to double +// Narrowing of types may result in ArithmeticException due to overflow +gremlin> g.inject(12).asNumber(N.byte) +==> 12 +gremlin> g.inject(128).asNumber(N.byte) +==> ArithmeticException +gremlin> g.inject(300).asNumber(N.byte) +==> ArithmeticException +---- + +String input will be parsed. By default, the smalled unit of number to be parsed into is `int` if no number token is provided. `NumberFormatException` will be thrown for any unparsable strings: Review Comment: Same comment as https://github.com/apache/tinkerpop/pull/3153/files#r2193656904 > Add number conversion step asNumber() > ------------------------------------- > > Key: TINKERPOP-3166 > URL: https://issues.apache.org/jira/browse/TINKERPOP-3166 > Project: TinkerPop > Issue Type: Improvement > Components: language > Affects Versions: 3.8.0 > Reporter: Yang Xia > Priority: Major > > Given the addition of the {{asString()}} and {{asDate()}} steps in the 3.7 > line, it should also be helpful to add an {{asNumber()}} step that does > numerical casting/conversions. > The current idea is for the {{asNumber()}} step to convert the incoming > traverser to the nearest parsable type (e.g. int or double) if no argument is > provided, or to the desired numerical type, based on a number token > ({{{}N{}}}) provided. Like the {{asDate()}} step, it will not be scoped (for > now, scopes can be added in the future). > Some conjured examples: > {code:java} > gremlin> g.inject(5).asNumber() > ==> 5 // parses to int > gremlin> g.inject(5.123f).asNumber() > ==> 5.123 > gremlin> g.inject(5.43).asNumber(N.int) > ==> 5 {code} > More details can be found in the [proposal > doc|https://github.com/apache/tinkerpop/blob/master/docs/src/dev/future/proposal-asnumber-step-6.asciidoc]. > -- This message was sent by Atlassian Jira (v8.20.10#820010)