I had the exact same issue with my C++ code and contacted IB support about it. The tech responded really promptly with this response: there seems to be a bug with how the API interprets the quantity value, and so it has to be passed using a function, like this:
order.totalQuantity = stringToDecimal( ¡®100¡¯ );
as in, pass the quantity as a string that gets converted using the ¡®stringToDecimal()¡¯ function