![]() |
![]() |
![]() |
|
Округление до Сотен, Тысяч | ☑ | ||
---|---|---|---|---|
0
Zlodey1С
09.12.08
✎
12:23
|
Есть какая нибудь приблада для округления числа до сотен или тысяч. Допустим число 86 округляем до 100, 869 до 1000, 1260 до 2000, 15684 до 16000 и т.д
|
|||
1
Zlodey1С
09.12.08
✎
12:24
|
Если самому писать то думаю только через длину числа и на сравнение последнего символа на 0.
|
|||
2
Euguln
09.12.08
✎
12:24
|
Встроенные функции языка
Окр (Round) Синтаксис: Окр(<Число>, <Разрядность>, <Режим округления>) Параметры: <Число> (обязательный) Тип: Число. Исходное число. <Разрядность> (необязательный) Тип: Число. Определяет число знаков дробной части, до которых производится округление. Если параметр отрицательный, то число округляется до соответствующего разряда в целой части, начиная с младших разрядов. Параметр обязательный, если указан параметр <Режим округления>. Значение по умолчанию: 0 |
|||
3
Immortal
09.12.08
✎
12:26
|
нипаверишь,)
Число = Окр(86145,-3); Сообщить(Число); |
|||
4
Zlodey1С
09.12.08
✎
12:26
|
(2) Внимательно читаем "Определяет число знаков дробной части"
|
|||
5
Zlodey1С
09.12.08
✎
12:26
|
(3) Счаз проверю
|
|||
6
wPa
09.12.08
✎
12:27
|
(4) а умножить поделить )
|
|||
7
zbv
09.12.08
✎
12:27
|
(4) внимательно читаем "Если параметр отрицательный ..."
|
|||
8
Sadovnikov
09.12.08
✎
12:27
|
(4) Внимательно читаем: " Если параметр отрицательный, то число округляется до соответствующего разряда в целой части"
|
|||
9
Zlodey1С
09.12.08
✎
12:28
|
Тысяча чертей
|
|||
10
Zlodey1С
09.12.08
✎
12:29
|
Не то
|
|||
11
Zlodey1С
09.12.08
✎
12:29
|
Надо в большую сторону
|
|||
12
wPa
09.12.08
✎
12:30
|
(10) Раздели - возьми Цел - умножЪ
|
|||
13
Zlodey1С
09.12.08
✎
12:30
|
Блин туплю все вопрос снят
|
|||
14
СоболиныйГлаз
09.12.08
✎
12:30
|
А мне вот надо было округлять до ближайшего(обязательно сверху) целого. Такой функции или режима известных функций не нашел.
|
|||
15
Fragster
гуру
09.12.08
✎
12:31
|
(14) раз в неделю такая фигня.... Окр(Твое+0.4999999999)
|
|||
16
Живой Ископаемый
09.12.08
✎
12:33
|
(15) Наверное ЦЕЛ(Твое+0.5)
|
|||
17
Живой Ископаемый
09.12.08
✎
12:33
|
а, не... не пойдет
|
|||
18
wPa
09.12.08
✎
13:19
|
Число = 15684;
Разрядов = СтрДлина(СтрЗаменить(Строка(Число), Символы.НПП,"")); Разрядов = ?(Разрядов<2,2,Разрядов); Разрядов = ?(Разрядов>3,3,Разрядов); Делитель = Pow(10,Разрядов); ЦелЧисло = Цел(Число/Делитель)+1; Результат = ЦелЧисло * Делитель; |
|||
19
Fragster
гуру
09.12.08
✎
13:21
|
(16) через Цел: Цел(Твое+0,9999999999999999)
|
|||
20
Живой Ископаемый
09.12.08
✎
13:26
|
2(19) Ну или так...
Или, чтобы не зависеть от количества девяток и точности дробной части в числе: ?(Цел(Твое)=Твое,Твое,Цел(Твое+1)) |
|||
21
Serg_1960
09.12.08
✎
13:28
|
Твое = Цел(Твое) + (Твое-Цел(Твое)>0.0);
|
|||
22
Serg_1960
09.12.08
✎
13:36
|
(21) +
// округление 0.5 в большую сторону: Твое = Цел(Твое) + (Твое-Цел(Твое)>=0.5); // округление 0.5 в меньшую сторону: Твое = Цел(Твое) + (Твое-Цел(Твое)>0.5); |
|||
23
Fragster
гуру
09.12.08
✎
13:40
|
(21,22) а как ты число и булево складываешь интересно...
|
|||
24
Cheater
09.12.08
✎
13:41
|
(14) а если число целое? например 13?
|
|||
25
СоболиныйГлаз
09.12.08
✎
13:44
|
(15):-) так я и написал нечто подобное, но таки такого режима округления в типовых функциях нет. Просто научись читать то, что пишет автор, а не то, что думаешь ты :-)
|
|||
26
СоболиныйГлаз
09.12.08
✎
13:49
|
(24)А если число целое, то 13=13 - т.е. никакого округления вверх. поэтому пример в (15) Окр(Твое+0.4999999999) скоропалителен и в общем случае неверен. А у меня именно общий случай и был :-) Т.е. количество необходимых девяток заранее неизвестно. Понятно, что и движок имеет определенную точность вычислений, но дела это не облегчало, поскольку были возможны ситуации типа 13,0...01.
|
|||
27
Fragster
гуру
09.12.08
✎
13:51
|
(26) а проверить? окр(13+0,499999999) = 13
|
|||
28
Fragster
гуру
09.12.08
✎
13:51
|
а девяток там лепить по желанию...
|
|||
29
Fragster
гуру
09.12.08
✎
13:52
|
(28)+ и по точности... в типовых больше 5 точности не видел, так что могу врать... ну да 9 девяток должно хватить полюбому, ибо 1с - не для научных расчетов используется :)
|
|||
30
Cheater
09.12.08
✎
13:55
|
(26) понятно
|
|||
31
Serg_1960
09.12.08
✎
13:58
|
(29) Мне бы вашу уверенность :)
Сообщить(13.1/13); // в окне будет выведено 1,007692307692307692307692307692307692 |
|||
32
Serg_1960
09.12.08
✎
14:10
|
(24) А проверить? А вот так убедительно звучит:
Твое = 13.00; Твое = Цел(Твое) + (Твое-Цел(Твое)>0.0); Сообщить(Твое); //"13" Твое = 13.0000000000000000000000000000000000000000000000000000000000000000000000001; Твое = Цел(Твое) + (Твое-Цел(Твое)>0.0); Сообщить(Твое); //"14" |
|||
33
СоболиныйГлаз
09.12.08
✎
14:21
|
(27)Я немного неправильно построил пост. То, что окр(13+0,499999999) = 13 я не сомневаюсь. Неверность в общем случае касалась именно количества девяток.
(28)Мое желание тут ни при чем. Просто разрядность заранее неизвестна и неизвестно, как тот или иной релиз движка будет отрабатывать ситуацию с очень большим числом девяток. Может получиться как с интеловскими процами в свое время, когда народ нарыл, что они из-за некоего упрощения или ошибки в алгоритме ошибаются на некие миллипизерные цифирьки. |
|||
34
Cheater
09.12.08
✎
14:21
|
(32) я спрашивал надо ли 13 округлять до 14 )))
|
|||
35
СоболиныйГлаз
09.12.08
✎
14:22
|
Я использовал более корректный, но чуть-чуть более сложный алгоритм.
|
|||
36
Живой Ископаемый
09.12.08
✎
14:24
|
(33) Глянь 20 - работает...
|
|||
37
СоболиныйГлаз
09.12.08
✎
14:27
|
(36)А чего глядеть? Я примерно так и сделал :-) Только реализовал это в виде функции, сходной с Окр()
|
|||
38
Fragster
гуру
09.12.08
✎
14:28
|
(32) я всегда думал, что в булево - ложь - это 0, а истина - это не 0
|
|||
39
Живой Ископаемый
09.12.08
✎
14:29
|
(37)а, понел... :)
|
|||
40
Fragster
гуру
09.12.08
✎
14:29
|
(38)+ в смысле, оно не всегда равно 1, и по этому в (32) - некорректное использование
|
|||
41
Serg_1960
09.12.08
✎
14:30
|
(34) Дык, ведь в (14) спросили :) Я и рад стараться (32)
|
|||
42
hhhh
09.12.08
✎
14:31
|
(33) а зачем нам столько девяток. И ежу понятно, что для реальных случаев, вполне достаточно 2-х девяток, ну на крайний случай 3-х. Например, округление цен в большую сторону:
Окр(13.01 + 0.499) = 14. |
|||
43
Serg_1960
09.12.08
✎
14:31
|
(40) А что не так?
Булево (Boolean) Синтаксис: Булево(<Значение>) Параметры: <Значение> (обязательный) Тип: Число, Булево. Исходное значение. Возвращаемое значение: Тип: Булево. Полученное значение. Описание: Преобразует полученный параметр в значение типа Булево. Преобразование числа к типу Булево производится по следующим правилам: 0 преобразуется в Ложь; ОСТАЛЬНЫЕ ЗНАЧЕНИЯ преобразуются в Истина. |
|||
44
Fragster
гуру
09.12.08
✎
14:34
|
(43) а про обратное преобразование
|
|||
45
Fragster
гуру
09.12.08
✎
14:34
|
(44) прочитал
|
|||
46
hhhh
09.12.08
✎
14:37
|
(43) здесь нигде не сказано, что ИСТИНА = 1. То есть в общем случае получается
Твое = Цел(Твое) + ОстальныеЗначения; |
|||
47
Serg_1960
09.12.08
✎
14:41
|
Да, поверьте мне на слово :)
Если Твое Тогда Соообщить("Любое число - ИСТИНА"); Иначе Сообщить("и только 0 - ЛОЖЬ"); КонецЕсли; |
|||
48
Fragster
гуру
09.12.08
✎
14:42
|
(46,47) в правилах преобразования к числу прочитал, что истина к единице преобразуется... в этом плане инетересо Число(Твое=Твое) всегда 1
|
|||
49
Живой Ископаемый
09.12.08
✎
14:43
|
Ну..
Цел(13.3)+((13.3-Цел(13.3))>0.0)=14, это я в табло проверил Цел(13)+((13-Цел(13))>0.0) = 13 Единственное что - я бы скобок везде наставил.. а то можно с приоритетом не угадать... |
|||
50
Cheater
09.12.08
✎
14:43
|
(41) я почему-то решил, что и 13 надо до 14 "округлять" (до ближайшего(обязательно сверху) целого). Я, наверное, один такой )))
|
|||
51
Fragster
гуру
09.12.08
✎
14:44
|
(50) ну тогда Цел(Твое)+1 канает
|
|||
52
Живой Ископаемый
09.12.08
✎
14:46
|
(50) тогда легче, никаких условий не надо...
|
|||
53
Serg_1960
09.12.08
✎
14:47
|
Шутки-шутками, но дело... 1С позволяет "управлять" округлением, но: в запросах ей "помогает" SQL :) - а у него другие "соображения" насчёт округлений :))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |