Поэтому я пытаюсь динамически рассчитать количество SMS-сообщений, которые будут отправлены для данной длины сообщения.SMS-сообщения разбиваются на 160-байтовые (символьные) куски.Я использую MOD 160 <= 1, потому что мне нужно учитывать для добавления и вычитания текста.Из соображений производительности я хочу выполнять вычисления numMsgs только вблизи границ: 0, 1, 160, 161, 320, 321, ... </p>
Проблема в том, что при длине msgBody в 160 операция округления оценивается как2 (160/160 = 1 + 0,5 с округлением в большую сторону).При значениях, кратных 160 + 1, должно получиться следующее наибольшее целое число, потому что любые 160 байтов + 1 байт равны целому дополнительному сообщению.
Я сделал эту работу, используя оператор ИЛИ и == 1 ИЛИ ==159. Он правильно увеличивается и уменьшается, но уменьшается только с кратностью 160 с -1, что неверно.
Кроме того, я могу поместить логику IF во внешнюю логику, чтобы просто вычесть 1, если MOD оценивает в 0(ноль), но это выглядело бестолково, и я бы лучше выучил шаблон, который мне может не хватать в моем колчане:)
if (msgBody.length() % 160 <= 1) {
numMsgs.setText(Math.round(msgBody.length() / 160 + 0.5));
}