Преобразование числа 1 в 1.00

1. Hamsik 13 14.06.18 17:05 Сейчас в теме
Всем привет, работая не первый год с 1с, столкнулся с проблемой преобразования числа из целочисленного в дробное.
Есть число 1 (INT) необходимо преобразовать в 1.00 (double), все же есть ли возможность сделать из числа 1 - число 1.00 ?
Подчеркну именно число, функцию формат не предлагать :)
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 34 14.06.18 17:12 Сейчас в теме
(1)
столкнулся с проблемой преобразования числа из целочисленного в дробное
в каком месте возникает проблема?
3. Hamsik 13 14.06.18 17:14 Сейчас в теме
(2) Попробуй из переменной
Тест = 1;
преобразовать в 1.00 с типом число
5. spacecraft 14.06.18 17:17 Сейчас в теме
(3) для просто хранения в переменной это бессмысленно.
6. spacecraft 14.06.18 17:20 Сейчас в теме
(3) и да, на каком ЯП можно хранить в переменной число 1.00?
7. vadim1011985 99 14.06.18 17:25 Сейчас в теме
(6) ну есть типазависимые ЯП если не ошибаюсь Java и там вроде нельзя складывать float и int
Terabaytus; +1 Ответить
9. spacecraft 14.06.18 17:28 Сейчас в теме
(7) это строготипизированные ЯП. Там нужно делать приведение типов.
1С не строготипизированный. Данные хранит так, как удобно.
10. vadim1011985 99 14.06.18 17:33 Сейчас в теме
(9) Вы ж спрашивали про ЯП , я и ответил, про 1с согласен , но не факт что "внутри самой 1с , а точнее 1с же написана на c++ не идет преобразование типов , мы просто об этом не задумываемся
37. spacecraft 14.06.18 17:53 Сейчас в теме
(10)
а точнее 1с же написана на c++ не идет преобразование типов

а исходники С++ тоже не сами по себе работают. Текст программы компилируется. Но мы же не задумываемся о работе компилятора, куда он нафиг классы девает?
11. herfis 498 14.06.18 17:33 Сейчас в теме
(7) Если проводить аналоги с Java, то одинэсный тип числа ближе всего к BigDecimal
13. vadim1011985 99 14.06.18 17:35 Сейчас в теме
(11) Наверно , я java изучал поверхностно , и простым типам уделял совсем уж мало внимания
4. spacecraft 14.06.18 17:14 Сейчас в теме
(1) в 1С нет понятий int, long, float, double. Вообще нет строгой типизации.
Значит проблема не в 1С, а в передаче данных куда-то еще. Куда?
Нужно больше информации.
21. DJDUH 17 14.06.18 17:43 Сейчас в теме
(1) "Именно число" - платформа сама обрезает до целого ,если нет значимых символов после запятой.

Число1 = Число("1.0000"); //     = 1 
Число11 =Число("1.00000000000000000000000000000000000001"); //       = 1.00000000000000000000000000000000000001 
8. herfis 498 14.06.18 17:28 Сейчас в теме
В 1С нет типов с экспоненциальной формой представления дробных чисел.
Есть только епически точное число и положение десятичной точки в нем.
Поэтому не совсем понятен смысл вопроса. Расскажи какую конкретно задачу ты решаешь. Именно конечную цель, а не как ты там себе надумал ее достигать.
vadim1011985; user858823; +2 Ответить
12. Hamsik 13 14.06.18 17:35 Сейчас в теме
(8) На самом деле была проблема в том, что в документе есть колонка табличной части с типом число (5,5) и в неё нужно было засунуть что то в духе 1.0000 или просто 1, вот и извращался как только мог думая как туда засунуть нужное мне число без изменения в типе колонки (реструктуризация двое суток). В итоге конечно пришлось поменять тип на (10,5) и всё взлетело (спустя двое суток). Я понимаю, что это абсолютно не проблема преобразования типов, но в ходе решения этого вопроса и появилась идея завести это обсуждение :)
17. herfis 498 14.06.18 17:40 Сейчас в теме
(12)
На самом деле была проблема в том, что в документе есть колонка табличной части с типом число (5,5) и в неё нужно было засунуть что то в духе 1.0000 или просто 1

По-прежнему непонятна суть проблемы. Нужно засунуть единицу? Засовывай единицу. Считаться будет правильно. Где проблема?
Нужно представлять как-то эдак? Представляй как надо.
(14) Считай, что сделал. Докажи, что не сделал. Приведи разницу в расчетах.
18. Hamsik 13 14.06.18 17:41 Сейчас в теме
(17) Есть проблема когда в колонку с типом число (5,5) засовываешь единицу - получаешь 0,99999
22. herfis 498 14.06.18 17:43 Сейчас в теме
(18)Правильный тип - (11,5).
Это если ты хотел отвести 5 знаков для целой части и 5 для дробной.
24. Hamsik 13 14.06.18 17:44 Сейчас в теме
(22) одну девятку лишнюю поставил, безусловно такое решение мной и было принято, но с реструктуризацией были проблемы как писал выше.
26. herfis 498 14.06.18 17:45 Сейчас в теме
(24) Так причем тут платформа, если ты ССЗБ.
32. Hamsik 13 14.06.18 17:50 Сейчас в теме
(26) Это да, полностью согласен) может через пару лет получится использовать 1с как клиент для отображения таблиц из sql, и все мои проблемы с реструктуризацией таблиц механизмами платформы уйдут)
41. herfis 498 14.06.18 17:59 Сейчас в теме
(32) Твоя проблема вообще никак не связана с типом числа в 1С. Она связана как раз с типами хранения данных в SQL. Просто SQL вообще не дал бы тебе записать единицу в колонку с типом Decimal(5,5), потому как единица выходит за пределы допустимого диапазона. А умная 1С просто преобразовала данные к минимально допустимым и наверняка выдала об этом предупреждение при рестуктуризации. Но они же для лохов, кто же их читает...
48. Hamsik 13 15.06.18 10:42 Сейчас в теме
(41) Давай без сарказма, идея отделять клиент от базы данных вполне адекватна, я не вижу смысла прерывать работу пользователей на долгое время из за того что в платформе так заложено
49. herfis 498 15.06.18 11:03 Сейчас в теме
(48) Я вообще уже не понимаю, что обсуждается в этом посте. Невозможность провести реструктуризацию базы без остановки работы пользователей?
Только не заводи песню про 1.00
Я надеюсь, ты уже выспался и голова прояснилась.
50. Hamsik 13 15.06.18 11:07 Сейчас в теме
(49) Конкретно моя с тобой ветка обсуждения ушла в другую степь, просто жалуюсь на свои проблемы и идеи, вот и всё)))
23. Sashares 34 14.06.18 17:44 Сейчас в теме
25. Hamsik 13 14.06.18 17:45 Сейчас в теме
(23) Я так понимаю так было всегда в платформе)
33. Sashares 34 14.06.18 17:51 Сейчас в теме
(25) Согласен, для колонки с типом число (5,5) это логично.
39. spacecraft 14.06.18 17:56 Сейчас в теме
(18)
Есть проблема когда в колонку с типом число (5,5) засовываешь единицу - получаешь 0,99999

А что нужно было хранить при таких ограничениях реквизита (не переменной) ?
14. Hamsik 13 14.06.18 17:37 Сейчас в теме
(8) Цель этого обсуждения надуманна и предельно проста - из 1 сделать 1.00 вот и всё)
15. vadim1011985 99 14.06.18 17:39 Сейчас в теме
(14) сделать любыми средствами ?
16. Hamsik 13 14.06.18 17:40 Сейчас в теме
(15) Средствами платформы разумеется )
19. vadim1011985 99 14.06.18 17:41 Сейчас в теме
(16)
1) Через Запрос выражение Выразить
2) 2 ТЧ с разным описанием типов колонок
3 ) Опять же функция формат - что мешает сделать так
Тест = Число(Формат(нужноечисло,"СтрокаФорматирования"))
20. Hamsik 13 14.06.18 17:43 Сейчас в теме
(19) Попробуй, но дело в том, что платформа в любом случае представит 1.00 как 1
27. Sashares 34 14.06.18 17:46 Сейчас в теме
(20) Где представит то? В элементе формы? У элемента формы есть формат представления, который можно настроить так как нужно в данном случае.
28. Hamsik 13 14.06.18 17:47 Сейчас в теме
(19) Мне не нужна строка, мне нужно число 1.00, твой вариант не работает, про функцию формат я писал в шапке.
30. vadim1011985 99 14.06.18 17:48 Сейчас в теме
(28) читаем код внимательнее результат число !!!
34. Hamsik 13 14.06.18 17:52 Сейчас в теме
(30) читаем код внимательнеее
Тест = Число(Формат(1,"ЧЦ=10; ЧДЦ=2"));
результат : 1, а не 1.00 :)
36. Sashares 34 14.06.18 17:53 Сейчас в теме
(34)Товарищ, вы херню несете. 1 и 1.00 в 1с как значение это одно и тоже.
35. Sashares 34 14.06.18 17:52 Сейчас в теме
38. Hamsik 13 14.06.18 17:53 Сейчас в теме
(35) Тема не является проблемой, тема есть повод для обсуждения)
40. Cooler 22 14.06.18 17:58 Сейчас в теме
(38)
Тема не является проблемой, тема есть повод для обсуждения)
Тема выявляет проблему автора.

Проблема заключается в непонимании того, что платформа 1С не позволяет различить 1 и 1.00

И что тут обсуждать?
Sashares; +1 Ответить
29. artgen 14.06.18 17:48 Сейчас в теме
Ну так задаешь соответствующее описание типов:

КЧ = Новый КвалификаторыЧисла(15,2);
Массив = Новый Массив;
Массив.Добавить(Тип("Число"));
ОписаниеТиповЧисло = Новый ОписаниеТипов(Массив, , ,КЧ);

ТаблицаЗначений = Новый ТаблицаЗначений;
ТаблицаЗначений.Колонки.Добавить("Количество",ОписаниеТиповЧисло);
vadim1011985; JohnGalt; +2 Ответить
31. herfis 498 14.06.18 17:50 Сейчас в теме
Ого. Началась битва виртуальных миров представлений одинэсников о компьютерных вычислениях.
vadim1011985; Hamsik; +2 Ответить
42. vadim1011985 99 14.06.18 18:01 Сейчас в теме
Кстати прикольно тут обаружил непонятный глюк

Тест1 = Число(Формат("1.01","ЧЦ=3; ЧДЦ=2")); // тут все ожидаемо на выходе 1,01
Тест2 = Число(Формат("1.01","ЧЦ=3")); // Ожидаю результат 1  на выходе 1.01 хотя если смотреть через конструктор форматной строки результат должен быть "1"  , он же должен отбросить дробную часть 
 ? 


Бл.....я - туплю я ж текст передаю а не число (((((
44. spacecraft 14.06.18 18:09 Сейчас в теме
(42)
Тест2 = Число(Формат("1.01","ЧЦ=3"))

параметры форматной строки указаны для числа, а в значении строка. Формат просто не отрабатывает
vadim1011985; +1 Ответить
45. vadim1011985 99 14.06.18 18:12 Сейчас в теме
(44) Да я уже понял , исправил свой пост уже
43. spacecraft 14.06.18 18:03 Сейчас в теме
Ограничение (5,5) дословно: всего 5 цифр, цифр после запятой 5.
Максимальное значение, которое может там храниться = 0.99999
Даже если туда поместить 999, то все равно может храниться только 0.99999
46. SlavaKron 14.06.18 18:17 Сейчас в теме
А есть какие-нибудь стандарты для числовых реквизитов 1С, чтобы максимально полезно использовать типы эдлиной 1, 2, 4 байт?
47. herfis 498 15.06.18 09:23 Сейчас в теме
(46) Еще раз. 1С потому и 1С, что разработчику не нужно знать о байтах и разных специфических типах данных. Тип числа только один и он динамической длины. Поэтому да - математика в 1С медленная. В разы медленнее, если сравнивать даже со скиптовыми языками с использованием "классических" типов. Но "классические" типы не подходят для финансовых вычислений, а реализовывать кучу числовых типов в 1С - оверкилл.
Суть в том, что в 99,99% случаев в приложениях 1С узкими местами производительности будут являться обращения к БД. Поэтому оптимизировать математику смысла нет от слова "совсем". Математика может стать узким местом только если реализовывать в 1С алгоритмы численных методов прикладной математики с большим количеством итераций (от сотни тысяч и выше) без обращений к БД. В продакшене для этого почти всегда используют внешние библиотеки. Хотя встречаются реализации и на 1С, когда не нужна большая точность и результат можно получить за приемлемое время на вменяемом количестве итераций.
В этом случае есть пара хитростей еще семерочных времен.
1) использовать вместо переменных реквизиты формы фиксированного размера (дает некоторый прирост при вычислениях за счет явного ограничения длины типа числа)
2) пихать куски алгоритмов в одну строку, снижая накладные расходы интерпретатора
user858823; +1 Ответить
51. пользователь 15.06.18 11:25
Сообщение было скрыто модератором.
...
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)