The processor does all integer arithmetic as 32-bit 2's complement. Hence, if you need it to fit in a 16 bit signed integer, and want it to max-out at 32767, just do the following:
MIN(32767, 3.1416 * N100)
This will work great when N100 is a large positive number. But since N100 is signed, you can have the same issue on the negative side. The lowest negative 16 bit integer value is -32768, so combine the answer above with the following:
MAX(-32768, MIN(32767, 3.1416 * N100))
The issue regarding the "rounding" problem is that computers are unable to represent most floating point numbers to exact precision. I like to give the example of 1/3 as a float would require an infinite amount of memory. You have 32 bits to represent really small numbers and really large numbers. Hence, you might have entered "3.1416", but internally, the closest it could get was 3.1415998 (not sure, only guessing). So in your expression, you end up with 31415.998, and when stored as an integer, it is TRUNCATED, so you end up with 31415, not 31416. Algebraically, it should be 31416, but in computers, they can only "approximate" floating point numbers.
The work-around when storing floating point results into an integer? Use ROUND, i.e. ROUND(3.1416 * N100). This will give you more precise answers on that Least Significant Digit.
So, your final expression should be:
MAX(-32768, MIN(32767, ROUND(3.1416 * N100)))