Имя: Пароль:
1C
1С v8
Десятичная запятая в тернарном операторе
🠗 (Волшебник 19.09.2022 18:06)
,
0 ДядяМитяй
 
19.09.22
15:29
Всех приветствую.
Есть некая формула, в которую подставляются значения из регистров, потом Вычислить() и все работает. В формуле может быть оператор ?(*условие, *выражение1, *выражение2).
И все работало, пока не появились десятичные дроби. Поскольку настройками ОС десятичный разделитель определен как запятая, то в операторе эта запятая воспринимается как разделитель выражений. Наверняка на этот случай предусмотрены какие-то специальный "скобки". Не смог найти информации. Может кто знает?
1 Fragster
 
гуру
19.09.22
15:31
Причем здесь тернарный оператор?


А = вычислить("100,0")
Встроенный язык: Строка кода 1: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {<Неизвестный модуль>(1,4)}: Ошибка в выражении
100<<?>>,0
2 RomanYS
 
19.09.22
15:32
(0) явно пиши числа в формате с точкой и без группировок. Можно XMLСтрока(Число) вместо формата
3 Fragster
 
гуру
19.09.22
15:32
если значения из регистров, то используй при подстановке XMLСтрока
4 Fragster
 
гуру
19.09.22
15:32
(2) блин(
5 ASU_Diamond
 
19.09.22
15:33
Значения в регистрах строковые?
6 ДядяМитяй
 
19.09.22
15:35
(5) числовые
7 Кирпич
 
19.09.22
15:38
(0) Во дает. В языке 1С числа с точкой пишутся. Чего ты понавыдумывал про тернарные операторы.
8 ДядяМитяй
 
19.09.22
15:42
(7) в 1С числа пишутся по умолчанию как настроено в ОС
9 Кирпич
 
19.09.22
15:47
(8) отдохни. ты перепрограммировал немножко.
10 Fragster
 
гуру
19.09.22
15:47
(8) Где ты был 8 лет?
вычислить работает с языком 1с. в языке 1с разделитель - точка. Иначе не работает.
11 RomanYS
 
19.09.22
15:54
(8) ты путаешь представление чисел в предприятии и литералы в конфигураторе. Здесь только точки и никаких группировок
12 ДядяМитяй
 
19.09.22
15:58
Ну да, поскольку итоговое выражение все равно строка, можно СтрЗаменить(Результат.ТарифЗаТочку, ",", ".") хоть тарифЗаТочку это число.
Но теоретический вопрос остался - можно ли написать запятую, чтобы она воспринималась как запятая, а не элемент оператора?
13 Кирпич
 
19.09.22
16:00
(12) ступай уже
14 ДядяМитяй
 
19.09.22
16:02
(11) мда... некорректно выразился изнутри своей проблемы). Имелось в виду, что в формуле число будет приведено к строке в соответствии с настройками винды.
15 Кирпич
 
19.09.22
16:11
(12) СтрЗаменить() лучше не надо. Лучше Формат()

Формат(Результат.ТарифЗаТочку,"ЧДЦ=2; ЧРД=.; ЧГ=")
16 RomanYS
 
19.09.22
16:17
(12) СтрЗаменить(Результат.ТарифЗаТочку, ",", ".")  
получишь ошибку когда тариф станет больше 1000.

>>Но теоретический вопрос остался - можно ли написать запятую, чтобы она воспринималась как запятая, а не элемент оператора?
Она и воспринимается как запятая, а запятые в численных литералах запрещены. Ты похоже ничего не понял.
(15) Лучше (3)
17 Волшебник
 
модератор
19.09.22
18:06
В языке программирования 1С десятичная запятая обозначается точкой и только так, независимо от настроек ОС и 1С.

Если где-то пролезла запятая, значит её надо превратить в точку. Это уже Ваша проблема.
18 НафНаф
 
19.09.22
18:48
(0) вы неявно число в строку превратили где-то
19 rudnitskij
 
19.09.22
21:46
СтрЗаменить(Результат.ТарифЗаТочку, ",", ".") - если Результат.ТарифЗаТочку имеет числовой тип, то стрзаменить тоже ошибку вернет
20 NorthWind
 
20.09.22
06:46
(0) в синтаксисе языков программирования, в том числе в языке 1С, разделитель дробей точка вне зависимости от того, как настроен формат в ОС. Поэтому получается что вы подаете на вход Выполнить некорректное выражение... Нужно явно приводить числа к тому виду, который понимается интерпретатором.
21 NorthWind
 
20.09.22
06:50
Ой, уже было сказано. Прошу прощения
22 ASU_Diamond
 
20.09.22
06:54
Мне интересно, что за задача, где вычисления с использованием значений регистров идёт через Вычислить()
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.