Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

4 Июль 2022, 02:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2   Вниз
  Печать  
Автор Тема: Обносление испортило формулы  (Прочитано 1370 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 776


« Ответ #15: 8 Декабрь 2021, 15:08 »

Только не понимаю почему раньше транслятор сам переводил число, результат вычисления oVK/100 (т.е. число 0,05), в строку, а теперь перестал. И ему вдруг потребовались указания на это программиста - "Str(oVK/100)"

Блин.

Раньше было так:

Код:
 dim s as string
  dim d as double
  d = 1.5
  s = d ' s = "1.5" независимо от текущей локали!!!

Теперь:

Код:
 dim s as string
  dim d as double
  d = 1.5
  s = d ' s = "1.5" в локали en-US, и s = "1,5" в локали ru-RU

Я вот честно не понимаю, зачем я всё-таки объяснять пытался. Ведь я описал, что произошло и в чём разница, и казалось бы, понятно, что не перестал он сам переводить число, а стал это делать иначе. То есть результат стандартного перевода теперь содержит не точку, а запятую - потому что стандартный перевод должен работать по законам текущей локали!

А указание программиста ему понадобилось для того, чтобы перевод был "нестандартным" - независимым от локали, и результат должен быть в "нейтральной" форме (с точкой независимо от того, что в текущей локали прописано).

Раньше Ваш код

Код:
oSheet.getCellByPosition(14, oRow).setFormula("=C701*" & oVK/100)

успешно переводил "=C701*" & oVK/100 в строку "=C701*0.05". А теперь тот же код успешно переводит то же самое выражение в строку "=C701*0,05" - а вот setFormula ожидает, что все числа туда будут записаны с точкой.
« Последнее редактирование: 8 Декабрь 2021, 15:16 от mikekaganski » Записан

С уважением,
Михаил Каганский
sokol92
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 940


WWW
« Ответ #16: 8 Декабрь 2021, 15:27 »

Мне кажется, нужно четко разделять мир Calc и мир Basic. Это -  разные миры (точно так же, как мир Excel и мир VBA). В каждом из этих миров - свои правила.

Внутренний мир Calc не локализован и "живет" в локали en_US. Исключения из этого правила обычно указаны явно, например, FormulaLocal.
Элементы пользовательского интерфейса (формулы, диалоги и т.д.) отображаются с учетом текущей локали и параметров LO.

В языке Basic часть функций вычисляется с учетом текущей локали. К ним, в частности, относятся функции преобразования типов Cxxx (кроме Cbool). Например, в локали ru_RU
Код:
Cdate("8 декабря 2021")
выдает текущую дату.
Для неявных преобразований действуют те же правила, что и для явных. Соответственно, если s - переменная типа String, то после присвоения
Код:
s=0.05
в локализации ru_RU строка s будет содержать текст "0,05".
При использовании функции Str следует помнить, что для неотрицательных чисел результат этой функции (текст) начинается с пробела.
Функция Val имеет также ряд специфических особенностей, например
Код:
Msgbox val("1a")
покажет 1.
« Последнее редактирование: 8 Декабрь 2021, 15:39 от sokol92 » Записан

Владимир.
Страниц: « 1 2   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!