Округление: меньше килограмма до сотых, больше — до десятых

В форматировании спецификации мы можем указать, с какой точностью выводить значение.

Вот только небольшие значения лучше выводить с округлением до сотых, а большие — с округлением до десятых. Такое обычно надо в спецификации арматуры.
Как сделать такое в Ревите?
Для начала скажу, что я вообще недолюбливаю округление, которое по умолчанию используется в спецификациях — например, из-за того, что, в подсчете Ревит сначала складывает неокругленные значения, а затем округляет сумму.
Поэтому мы создадим расчетный параметр, который будет округлять значения при помощи формул, и будем работать с ним.

1. Расчетные параметры для подсчета массы

Для подсчета массы создадим параметр «МассаПогМетра» типа «число», с формулой
МассаПогМетра = 3.1416 * 7.86 * ((Диаметр стержня / 2 мм) ^ 2) / 1000
Определяем площадь поперечного сечения и умножаем на плотность стали — получаем массу единицы длины.
Затем создадим параметр «МассаСтержня» типа «Длина», определим массу, пока без округления:
МассаСтержня = МассаПогМетра * Длина стержня
Вот только получается что-то не то — масса в граммах:
Оно и понятно, массу мы посчитали на погонный метр, а длина — в миллиметрах. Надо еще разделить на 1000:
МассаСтержня = МассаПогМетра * Длина стержня / 1000
Сделаем пока в «Форматировании» округление до двух знаков и перейдем ко второй части

2. Работа с округлением при помощи формул

Добрались до самого интересного.
В чем идея округления? В формулах Ревита есть оператор round(x). Он округляет число до ближайшего целого. Для того, чтобы получить округление до десятых, нужно использовать
0.1*round(x*10)
0.1*round(6.5785*10) = 0.1*round(65.785) = 0.1*66 = 6.6
До сотых, соответственно, 0.01*round(x*100).
Есть еще одна проблема — round() работает только с безразмерными единицами — типа «Число». Длину-массу-площадь он не округляет, и оно понятно — ведь неизвестно, до каких единиц надо округлять. Мы воспользуемся возможностью перевода единиц в формулах:
ПараметрДлина/1мм = ПараметрЧисло
68мм / 1мм = 68мм / 1мм = 68
Понятно — миллиметры сокращаются, остается голое число. Если надо опять получить длину — можно умножить на 1мм.
Пробуем — создаем расчетный параметр «МассаСтержняОкругл» и пишем формулу, используя оператор if (вместо умножения на 10 использую деление на 0.1, чтобы сразу и от миллиметров избавиться):
МассаСтержняОкругл = if(МассаСтержня < 1, 0.01 мм * round(МассаСтержня * 10 /), 0,1 мм * round(МассаСтержня / 0.1 мм))
 
Но вот что получилось:
Где мы ошиблись?
 
Откроем снова окно формулы, вот что видим:
 
Ревиту не понравилось число «0.01 мм» и он округлил его до нуля.  Еще, надо использовать не «МассаСтержня < 1«, а «МассаСтержня < 1000«; и вообще, что-то я в единицах совсем запутался.
Конечно, все можно победить (через «Настройки единиц проекта» и тд), но я рекомендую другой способ, которым обычно пользуюсь.

3. Использование в расчетах параметра «Число»

Вместо того, чтобы бодаться с настройками единиц, лучше всего везде работать с параметром типа «Число». Это очень простой параметр, не имеющий размерности, имеющий максимальную точность и без сюрпризов вроде автоматического округления «0.01» до «0».
К «числу» можно привести любой параметр, если разделить его на нужную единицу измерения, как мы делали для round(). Настоятельно рекомендую не давать Ревиту самостоятельно заниматься округлением и работой с единицами измерения, и использовать только параметр «длина», «целое», «площадь», а все остальное — массы, плотности, да что угодно, — делать «Числом».
Итак, удалим параметр «МассаСтержня» и создадим новый, типа «Число». Формула для него:
МассаСтержня = МассаПогМетра * Длина стержня / 1000мм
 Обратите внимание на «мм» в конце формулы — делим «длину» на миллиметры, получаем «число».
Также удалим параметр «МассаСтержняОкругл» и создадим такой же, типа «Число». Формула:
МассаСтержняОкругл = if(МассаСтержня < 1, 0,01 * round(МассаСтержня * 100), 0,1 * round(МассаСтержня * 10))
Ну и результат:
Удачи!