С Новым годом! Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/918: Рейтинг темы: голосов - 918, средняя оценка - 4.98
ymkWor2008

Формат числа, округление, число знаков после запятой.

17.04.2008, 08:24. Показов 178898. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

подскажите как указать что переменная будет иметь только два символа после запятой, а все остальное округлять?
не реквезит документа, а просто переменная?
Крнечно можно сделать специальный реквизит в документе, где и обрезать лишние символы, но хотелось бы все таки узнать как сделать это с простой переменной?
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.04.2008, 08:24
Ответы с готовыми решениями:

Количество знаков после запятой у Заголовка
Сцществует следующая проблема. На форме создан Заголовок "СуммаНДС". Как сделать так, чтобы чисел после запятой было не бесконечное...

Добавить числа после запятой
Надо добавить 3числа после зяпятой .помогите Процедура Печать1(ТабДок, Ссылка) Экспорт //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать1) Макет =...

Округление числа до 2 знаков после запятой
Буду очень признательна, если кто-то подскажет, как написать программу, округляющую число до двух знаков после запятой. Программа должна...

18
0 / 0 / 0
Регистрация: 28.03.2004
Сообщений: 1,913
17.04.2008, 09:53
1. Чем не устраивает функция округления при присвоении значения переменной?
2. Я таки не понял, вам надо округлять до определенной точности или обрезать лишние символы?
0
ymkWor2008
17.04.2008, 10:16
вот к примеру
вот этол число храниться в переменной
Переменная = 800.304

мне надо что оно округлялолось и имело два символа после запятой
вот такого вида: 800.31
0 / 0 / 0
Регистрация: 11.11.2005
Сообщений: 584
17.04.2008, 11:35
Цитата Сообщение от IngWar2008
подскажите как указать что переменная будет иметь только два символа после запятой, а все остальное округлять?
Никак, 1С не поддерживает типизацию переменных, 7.7. точно. Правда, из нехранимых данных, типизируются колонки таблиц значений, например так:

Code
1
2
3
4
5
6
7
Переменные = СоздатьОбъект("ТаблицаЗначений");
Переменные.НоваяКолонка("чКоличество", "Число", 6, 2);
Переменные.НоваяСтрока();
 
Переменные.чКоличество = "67абв";
стр=0;
Переменные.ВыбратьСтроку(стр);
Кстати, ваш пример все равно не реализуется, т.к. при типизации значения, после присвоения 800.304 переменной с двумя знаками после запятой ее значение станет 800.30 а не 800.31.
0
0 / 0 / 0
Регистрация: 15.05.2007
Сообщений: 152
17.04.2008, 14:51
Взять дробную часть, оставить ДВА знака, проанализировать хвост и если он больше нуля, прибавить единицу к последнему знаку дробной части...
0
0 / 0 / 0
Регистрация: 01.09.2007
Сообщений: 50
17.04.2008, 15:03
Isabela, поддерживаю Вас.
Добавлю, что я для подобных преобразований переводил бы число в строку, а потом обратно в число.
0
0 / 0 / 0
Регистрация: 15.05.2007
Сообщений: 152
17.04.2008, 17:24
ну, в этом вряд ли есть необходимость - все дело просто в десятичной арифметике - задачка для пятиклассника
0
0 / 0 / 0
Регистрация: 01.09.2007
Сообщений: 50
17.04.2008, 17:34
ну да, может быть... ;)
0
0 / 0 / 0
Регистрация: 31.01.2008
Сообщений: 89
17.04.2008, 18:51
Переменная = Формат(выражение,"Ч12.2")
0
0 / 0 / 0
Регистрация: 15.05.2007
Сообщений: 152
18.04.2008, 00:29
Ну, замечательно.
прогоните код
X = 800.304;
XX = Format(X,"N12.2");
Message(XX);
и получите
800.30 !

Нет в 1с стандартных способов округления в бОльшую сторону, если первая отбрасываемая цифра меньше 5

Поэтому придется не полениться и написать несколько строчек, реализующих это
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
18.04.2008, 01:21
Вот возможный пример для ленивых

Function RoundUpToNextFractional(x,n)
// x - число на входе
// n - количество знаков после запятой, которое следует преобразовать так, как хотел вопрошающий

D = 1;
for k = 1 to n do
D = D*10
// увы, степени в 1с нет !
enddo;
xx = x*D;
if (xx-INT(xx) > 0) AND (xx-INT(xx) < 0.5) then
xx = Round(xx/D+1/(D-1),2,0)
else
xx = Round(xx/D,2,1)
endif;
Return xx
endFunction
0
0 / 0 / 0
Регистрация: 15.05.2007
Сообщений: 152
18.04.2008, 02:37
А мне вот довелось реализовывать формулу, содержащую ОТРИЦАТЕЛЬНУЮ степень в 1с
Так я не нашла ничего лучшего, нежели притянуть макрос из Excel
И вышло примерно так (в глобальном модуле):

Function Degree(x,y) Export
ExcelApp = CreateObject("Excel.Application");
NewWorkBooks = ExcelApp.WorkBooks;
WorkBook = NewWorkBooks.Add();
Page = WorkBook.Worksheets(1);

XCol = Page.Columns(1);
YCol = Page.Columns(2);
RCol = Page.Columns(3);
XCell = ExcelApp.Cells(2,1);
XCell.Value = x;

YCell = ExcelApp.Cells(2,2);
YCell.Value = y;
RCell = ExcelApp.Cells(2,3);
RCell.FormulaR1C1 = "=POWER(RC[-2],RC[-1])";

ExcelApp.Visible = 0;

Result = RCell.Value;
//Message(Result);
ExcelApp.Quit();
Return Result;
EndFunction

Подскажите более изящное решение
0
Sytvyr Wymd
22.04.2008, 11:26
Цитата Сообщение от Isabela
Подскажите более изящное решение
Вообщето:
x^y=EXP(y*LN(x))

а в 1С8 есть


Pow (Pow)
Синтаксис:
Pow(<Основание>, <Показатель>)
Параметры:
<Основание> (обязательный)
Тип: Число. Основание операции возведения в степень.
<Показатель> (обязательный)
Тип: Число. Показатель степени.
Возвращаемое значение:
Тип: Число. Результат возведения в степень.
Описание:
Возводит число <X> в степень <Y>.
0 / 0 / 0
Регистрация: 15.05.2007
Сообщений: 152
22.04.2008, 11:54
А ты пробовал, как это (x^y=EXP(y*LN(x))) будет работать в 7.7 ? Написать-то можно что угодно...
0
Sytvyr Wymd
22.04.2008, 12:54
М-да, действительно, EXP() в 7.7 вообще нет, а Лог() только для положительных. Жесть. У меня раньше небходимиости ими пользоваться в 1С не возникало, но я и предположить не мог, что они отсутствуют среди стандартных функций.

В таком случае нашлась по поиску вот такая информация - глянь, может подойдет http://www.sinor.ru/~my1c/knowhow/addmath.html.
Ftut
22.04.2008, 14:07
А если так?

X = Цел(Переменная * 100)/100;
Y = Переменная - X;
Переменная = ?(Y <> 0,Цел(Переменная*100)/100 + 0.01,Переменная);
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
22.04.2008, 21:06
Ага, для округления вверх до второго знака и это сгодится, ну а если потребуется "округлять" до 3-го, 4-го и т.п. ?
Вроде, процедурку употребить в самый раз
0
0 / 0 / 0
Регистрация: 28.03.2004
Сообщений: 1,913
23.04.2008, 09:14
vbs
Тогда в том, что написал Flut рекурсивно умножать и делить на 10

ОФФ: А вообще чувствуется, что на форум начали подтягиваться Программисты, потому как большинство тем перетекает из формата криков о помощи в русло обсуждений алгоритмов и реализации оных.
0
0 / 0 / 1
Регистрация: 22.06.2013
Сообщений: 9
23.04.2008, 13:55
Так, на мой взгляд, форум именно на это и ориентирован в первую очередь. Я помню первое знакомство с 1С 11 лет назад. Полдня тупо смотрел на отчет "ОстаткиТоваров", пока понял, как в принципе формируются данные (надо было вставить еще одну колонку в таблицу), так что начинающему (даже и с опытом программирования в иных средах) стоит пару-тройку месяцев поразбираться самостоятельно, обложившись стопкой ЖКК. Действительно, многие "крики о помощи" вызывают снисходительную улыбку. Без многомесячной кропотливой работы, увы, не обойтись !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.04.2008, 13:55
Помогаю со студенческими работами здесь

Округление числа до 4 знаков после запятой
При табуляции как сделать при Y, чтобы после запятой было 4 знака?

Округление числа до двух знаков после запятой
Всем привет!!!! Подскажите, пожалуйста, как сделать. Умножаю число на 1024. Числа может быть 554,66 или 444,78 ну в таком формате. Как...

Округление числа до двух знаков после запятой
8. Написать программу, которая предлагает пользователю ввести дробное число, округляет его до двух знаков после запятой и выводит результат...

Функция round(), округление числа до 4-х знаков после запятой
Вот наткнулся на проблемку как округлить число до 4 знаков после запятой? Подскажите что делать?

Округление числа в строке до указанного количества знаков после запятой
Как делать округление в строке, до знака после запятой порядковый номер который задаёт пользователь с клавиатуры


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru