draft-ietf-httpbis-header-structure-15, Serializing a Decimal

4.1.5.  Serializing a Decimal
https://tools.ietf.org/html/draft-ietf-httpbis-header-structure-15#section-4.1.5


|   Given a decimal_number as input_decimal, return an ASCII string
|   suitable for use in a HTTP header value.
|
|   1.  Let output be an empty string.
|
|   2.  If input_decimal is less than (but not equal to) 0, append "-" to
|       output.
|
|   3.  Append input_decimal's integer component represented in base 10
|       (using only decimal digits) to output; if it is zero, append "0".
|
|   4.  If the number of characters appended in the previous step is
|       greater than 12, fail serialisation.
|
|   5.  Append "." to output.
|
|   6.  If input_decimal's fractional component is zero, append "0" to
|       output.
|
|   7.  Else if input_decimal's fractional component has up to three
|       digits, append them represented in base 10 (using only decimal
|       digits) to output.
|
|   8.  Otherwise, append the first three digits of input_decimal's
|       fractional component (represented in base 10, using only decimal
|       digits) to output, rounding the final digit to the nearest value,
|       or to the even value if it is equidistant.
|
|   9.  Return output.

I'm not sure how this works.


Let's input_decimal  to be 123.9998

After step 3 output is "123"

After step 5 output is "123."

On step 8 the first three digits of input_decimal's fractional component
are "999".

The final digit is "9".  There is no possiblity to round up that digit.

So final output is "123.999".

Is that orrect ? That is effectively truncation.

If 123.9998 is rounded to 3 fractional decimals, value is 124.000,
but that serialization can not produce it.

/ Kari Hurtta

Received on Wednesday, 29 January 2020 18:17:55 UTC