Составляем то, что предоставил ОП:
n
- размер в 100 мм.
1 дюйм, 2,54 см, 25,4 мм.
inchs = n * 100 / 25.4
или inchs = n / (100 * 25.4)
или inchs = n / 2540
1 дюйм - 72 балла.
points = inchs * 72
1 twip
составляет 1/20.
twips = points / 20
Теперь все вместе:
twips = n / 2540 * 72 / 20
или twips = n * 72 / 2540 / 20
или twips = n * 72 / 127
Если это сделано в int
арифметике, вместо математического округления будет усечение. Это можно исправить, добавив половину 127 (127 / 2 = 63
) к n * 72
:
twips = (n * 72 + 63) / 127
Это не обрабатывает отрицательные числа правильно. Для этого вместо этого нужно вычесть 63:
twips = n >= 0 ? (n * 72 + 63) / 127) : (n * 72 - 63) / 127;
и вот мы здесь.
Как уже указывалось Ron , оператор ?:
является троичным оператором if-then-else .
Более легкая для чтения (но может быть менее оптимизированная) замена будет:
if (n >= 0) twips = (n * 72 + 63) / 127);
else twips = (n * 72 - 63) / 127;