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

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

17.04.2008, 08:24. Показов 178991. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru