EMA C++ post message, value after decimal point is truncated

I am using the EMA C++ for posting messages into TRCC. I used addRealFromDouble to add double value to the FieldList. Posting works okay, however the value in TRCC ended up as 1 instead of the contributed 1.0038759000

_fList.addRealFromDouble(21, 1.0038759000 ); /* HST_CLOSE */
_fList.addRealFromDouble(393, 1.0038759000 ); /* PRIMACT_1 */

I tried addDouble, but that has limitation on the length of the value.

questions:

1. Why the value is truncated?

2. What is the better way to post double value?

Best Answer

  • umer.nalla
    Answer ✓

    Hi @ye.li

    the parameters for addRealFromDouble are:

    fieldId field id value
    value added double to be converted to OmmReal
    magnitudeType OmmReal::magnitudeType used for the conversion (default value is OmmReal::Exponent0Enum)


    For non-integer values, you need to specify the MagnitudeType e.g. ExponentNeg7Enum

    See documentation for enum thomsonreuters::ema::access::OmmReal::MagnitudeType for full list.

    The format you are using is for Integer values i.e. default value of Exponent0Enum

Answers

  • FieldList& addRealFromDouble( Int16 fieldId, double value,
    OmmReal::MagnitudeType magnitudeType = OmmReal::Exponent0Enum );

    I thought the purpose of having this function is that I don't have to convert the double to int first, and then specify the magnitude. Otherwise, what's the difference between using this one and addReal()?

  • So that means when use the addRealFromDouble(), I still need to track how many digits after the decimal point, and set up the corresponding magnitude in the last function parameter. Is it right?

  • Hi @ye.li

    Correct - the difference between this and the addReal is that this saves you having to convert your real number to an int mantissa value.