|
Округление числа с одним знаком после запятой | ☑ | ||
---|---|---|---|---|
0
Snail
01.07.20
✎
11:02
|
Всем привет!
Как сделать округление такого вида: есть реквизит (число) с двумя знаками после запятой, нужно чтобы округлялось 10,56 в 11,00, а 10,40 в 10,50 |
|||
1
fisher
01.07.20
✎
11:07
|
Либо точнее правила округления сформулируй, либо дай больше разных примеров, если туго с формулировками. Округлять в большую сторону с шагом 0.5, что ли?
|
|||
2
Snail
01.07.20
✎
11:09
|
Нужно чтобы было так: если 10,01 тогда 10,50 или 10,51 в 11,00 на выходе должно быть только два варианта 0,50 и 1,00
|
|||
3
fisher
01.07.20
✎
11:13
|
Кратность = 0.5;
Результат = Цел(Окр(Сумма / Кратность, 0)) * Кратность |
|||
4
Shandor777
01.07.20
✎
11:13
|
(0) Не останавливаясь на странности "округления", обращу внимание, что второй знак после запятой вводит в заблуждение, указывая предполагаемую точность до второго знака.
|
|||
5
fisher
01.07.20
✎
11:14
|
А, нет, стоп. Тебе ж 10,01 вверх надо.
|
|||
6
Snail
01.07.20
✎
11:16
|
Да, сейчас 10,51 это 10,50
|
|||
7
fisher
01.07.20
✎
11:16
|
Тогда, наверное, так:
Цел(Окр(Сумма + 0.499 / 0.5, 0)) * 0.5 |
|||
8
Snail
01.07.20
✎
11:18
|
Сейчас 10,51 это 6,00 :(
|
|||
9
fisher
01.07.20
✎
11:19
|
А так :)
Цел(Сумма + 0.499 / 0.5, 0) * 0.5 |
|||
10
fisher
01.07.20
✎
11:19
|
Цел(Окр((Сумма + 0.499) / 0.5, 0)) * 0.5
|
|||
11
Ненавижу 1С
гуру
01.07.20
✎
11:20
|
Кратность = 0.5;
Результат = (Цел(Сумма/Кратность)+?(Сумма%Кратность>0,1,0)) * Кратность |
|||
12
fisher
01.07.20
✎
11:20
|
Тьфу
Цел((Сумма + 0.499) / 0.5, 0) * 0.5 |
|||
13
Shandor777
01.07.20
✎
11:22
|
А что, создать функцию, в которой выделить дробную часть, и использовать Если-Иначе-КонецЕсли некомильфо?
Думаете будет медленнее работать, чем куча делений-умножений? |
|||
14
Snail
01.07.20
✎
11:25
|
fisher,
Цел((Сумма + 0.499) / 0.5, 0) * 0.5 вылетает ошибка ( |
|||
15
fisher
01.07.20
✎
11:26
|
(14) Описка.
Цел((Сумма + 0.499) / 0.5) * 0.5 |
|||
16
Snail
01.07.20
✎
11:26
|
Цел((Сумма + 0.499)) / 0.5<<?>>, 0) * 0.5;
|
|||
17
Snail
01.07.20
✎
11:27
|
ОГРОМНОЕ спасибище !!! То, что надо ))
|
|||
18
fisher
01.07.20
✎
11:28
|
В (11) фактически тот же вариант, только более универсальный.
|
|||
19
Злопчинский
01.07.20
✎
13:18
|
//******************************************************************************
// глОкруглить(Числ, ПорядокОкругления) // // Параметры: // Числ - исходное число // ПорядокОкругления - элемент перечисления Порядки окгугления: // "шаг" округления (0.01 (арифметическое), 0.01, 0.05, 0.1, 0.5, 1, 5, 10, 50, 100) // // Возвращаемое значение: // Округленное по заданному порядку значение // // Описание: // Округляет число вверх по заданному порядку. Т.е число 123.37 при порядке // округление 0.5 превратиться в 123.50, а число 0.1 при порядке округления // 5 станет равным 5. // Если значение перечисления ОкрТочно, то округляет арифметически до 0.01 // Функция глОкруглить(Числ, ПорядокОкругления) Экспорт Перем Рез; Если ПорядокОкругления = Перечисление.ПорядкиОкругления.ОкрТочно Тогда // арифметическое округление до 2-х знаков после запятой Рез = Окр(Числ, 2); Иначе // округление к верхней границе по заданному порядку // преобразуем порядок округления число Порядок = Число(Строка(ПорядокОкругления)); // вычислим количество интервалов, входящих в число КолвоИнтервал = Числ / Порядок; // вычислим целое количество интервалов. КолвоИнтервалЦел= Цел(КолвоИнтервал); Если КолвоИнтервал = КолвоИнтервалЦел Тогда // Числа поделились нацело. Округлять не нужно. Рез = Числ; Иначе Рез = Порядок * (КолвоИнтервалЦел + 1); КонецЕсли; КонецЕсли; Возврат Рез; КонецФункции // глОкруглить() |
|||
20
pechkin
01.07.20
✎
13:20
|
лучше через если писать. чем 0.4999 прибавлять
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |