[x3d-public] X3DJSAIL -- precision stripping of trailing zeroes and decimal point

John Carlson yottzumm at gmail.com
Sun Feb 5 02:41:08 PST 2017


Don, I think your replaceAll's might fail because they will take a number
like 100 (probably impossible) and return 1.   I think you are safe with
floats and doubles, but the code should be documented.   Also be wary of
choosing a SO answer without a green check.

On Feb 4, 2017 9:06 PM, "Don Brutzman" <brutzman at nps.edu> wrote:

> [cc: x3d public list]
>
> John, thanks for requesting that trailing zeros get stripped.  Now
> implemented using new utility function
>
>         http://www.web3d.org/specifications/java/javadoc/org/web3d/
> x3d/java/fields/X3DConcreteField.htmlstripTrailingZeroes-double-
>         http://www.web3d.org/specifications/java/javadoc/org/web3d/
> x3d/java/fields/X3DConcreteField.htmlstripTrailingZeroes-float-
>
> Surprisingly this took a little doing, apparently it is an edge case in
> Java.
>
> For anyone interested, useful (though high variance) references are
>
>         StackOverflow: Remove trailing zeros from double (String
> manipulation solution)
>         http://stackoverflow.com/questions/11284938/remove-trailing-
> zeros-from-double
>
>         StackOverflow: How to nicely format floating numbers to String
> without unnecessary decimal 0? ("In short" solution)
>         http://stackoverflow.com/questions/11284938/remove-trailing-
> zeros-from-double
>
> Looking for simplicity and high performance among various approaches, I
> adapted a regular expression (regex) version from one alternative within
> the first forum entry as
>
>         public static String stripTrailingZeroes (float value)
>         {
>                 // regex to strip trailing zeroes, then strip trailing
> decimal point
>                 return String.valueOf(value).replaceAll("[0]*$",
> "").replaceAll("\\.$", "");
>         }
>
> regex decipherment:
>
> - [0]* zero or more 0 characters
> - $    end of line anchor
> - \\   escaped, literal backslash character \
> - \\.  escaped, literal decimal point
>
> None of the code is profiled yet but no discernible slowdown seen - as
> expected, regex processing appears to be extremely efficient.
>
> Future work #1: we may need to coerce English locale inside X3DJSAIL in
> order to force the output of decimal points as period . instead of comma ,
> (as is common in Europe).
>
> Future work #2: this pattern is good to add to our X3D Regex page when
> that starts moving again.
>
>         http://www.web3d.org/specifications/X3dRegularExpressions.html
>
> Future work #3: we should likely consider adding such stripping of
> trailing zeroes from numeric types as part of X3D Canonical Form since such
> characters are superfluous and do not change the graphical contents of a
> file.
>
>         ISO/IEC 19776-3:200x X3D Compressed binary encoding -- 4 Concepts
>         4.2.3 X3D canonical form
>         http://www.web3d.org/documents/specifications/19776-3/V3.1/
> Part03/concepts.html#X3DCanonicalForm
>
> Interestingly, stripping the trailing .0 characters seems to improve
> readability too.  Canonicalization (C14N) suggestion posted for eventual
> resolution using Mantis issue tracker.
>
> Test reports welcome.
>
>         http://www.web3d.org/specifications/java/X3dJavaSceneAuthori
> ngInterface.html
>
> Have fun with X3DJSAIL Java!   8)
>
> On 2/3/2017 5:11 PM, Don Brutzman wrote:
>
>> you are right (of course) and i will look for the correct formatting
>> invocation in Java to accomplish that approach.
>>
>> On 2/2/2017 5:28 AM, yottzumm at gmail.com wrote:
>>
>>> Re: removing precision of .0 floats and doubles…often this precision is
>>>>> added by the software, so we would be restoring it.
>>>>>
>>>>
>>> Don Brutzman wrote:
>>>
>>> hmmm let's look closely at those please.  i think that precision is
>>>> defined by data type so either 0 or 0. or 0.0 are equivalent.
>>>>
>>>
>>> stripping trailing zeroes reduces file size without loss of
>>>> information.  We probably should add that to C14N binary encoding rules
>>>>
>>>
>>> I suggest that the X3DJSAIL toString() field methods for floats and
>>> doubles (and their arrays, vectors, matrices, MF fields, etc) strip off
>>> trailing .0’s – Removing the .0 should save space if not anything else.
>>> This will help with roundtrip comparisons.  I believe this is in many
>>> places, but I could be wrong.  Perhaps create a helper method which does
>>> the precision stripping.  In a more scientific sense, the precision is
>>> being added by Java I think…just need to use the right method for printing
>>> in out (in Number, perhaps?).  This is basically happening often when a
>>> float is encountered which is an integer.  If you want specifics, I will
>>> try to create diffs.
>>>
>>
> all the best, Don
> --
> Don Brutzman  Naval Postgraduate School, Code USW/Br
> brutzman at nps.edu
> Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA
> +1.831.656.2149
> X3D graphics, virtual worlds, navy robotics http://faculty.nps.edu/brutzma
> n
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20170205/76ae81b7/attachment-0001.html>


More information about the x3d-public mailing list