[Решено] Разные национальные стандарты в формулах

Автор Sirius34, 14 февраля 2022, 15:00

0 Пользователи и 1 гость просматривают эту тему.

sokol92

Цитата: Sirius34 от 15 февраля 2022, 13:50Потестил. Не то получается в результате: дробная часть отсекается точкой.
В значении, возвращаемом функцией FIXED, дробная доля отделяется разделителем по умолчанию (как и в TEXT).
Если у Вас это не так, то выложите, пожалуйста, файл - пример.
Владимир.

Sirius34

Цитата: sokol92 от 15 февраля 2022, 13:59
В значении, возвращаемом функцией FIXED, дробная доля отделяется разделителем по умолчанию (как и в TEXT).
Если у Вас это не так, то выложите, пожалуйста, файл - пример.
Не так. В описании функции сказано, что разделитель разрядов может быть либо по настройкам локали, либо вообще не будет.
Прикладываю файл. Эксперименты проводил при настройках локали LO - английская (США)

sokol92

#17
Ваши слова не противоречат моим: разделитель дробной доли и разделитель тысяч будут сформированы FIXED в соответствии с локализацией (как и функцией TEXT). Недостаток (неисправимый) TEXT в том, что второй параметр (формат) надо тоже писать в соответствии с локализацией, а у FIXED этой проблемы нет.

Пример для LO c локализацией en_US (Ubuntu 20.04) с приведенным Вами форматом.
Если в ячейке A2 содержится число 1234,56 (2 знака после запятой), то формула
=TEXT(A2,"# ##0,00")
выдает текст "1,235". Так и задумано?

Какова цель: сформировать текстовое представление числа так, чтобы разделителем дробной доли была запятая, а разделителем тысяч пробел (независимо от локализации)?
Владимир.

Sirius34

Цитата: sokol92 от 15 февраля 2022, 14:40Если в ячейке A2 содержится число 1234,56 (2 знака после запятой), то формула
Ничего она не меняет, тот же самый текст получаем. А FIXED даёт ошибку.
А вот если написать 1234.56 (через точку), тогда да - TEXT приводит к 1,235

mikekaganski

Цитата: sokol92 от 15 февраля 2022, 14:40
Недостаток (неисправимый) TEXT в том, что второй параметр (формат) надо тоже писать в соответствии с локализацией.

Этот недостаток легко исправляется фиксацией локализации отдельной ячейки.

Цитата: sokol92 от 15 февраля 2022, 14:40
en_US (Ubuntu 20.04) с приведенным Вами форматом.
Если в ячейке A2 содержится число 1234,56 (2 знака после запятой), то формула
=TEXT(A2,"# ##0,00")
выдает текст "1,235". Так и задумано?

Задумано кем? Автором формулы? нет. А программа работает правильно, воспринимая пробел как литерал (поскольку он не соответствует никакому спецзнаку), а запятую - в соответствии с локалью ячейки (которая по умолчанию соответствует локали программы, которая по умолчанию соответствует локали системы) как разделитель тысяч. Поэтому число и выводится без дробной части, зато с разделителями тысяч.

Другое дело, что фиксировать это нельзя только средствами формулы - надо настроить свойства ячейки (скажем, стиля по умолчанию).
С уважением,
Михаил Каганский

Sirius34

Цитата: sokol92 от 15 февраля 2022, 14:40Какова цель: сформировать текстовое представление числа так, чтобы разделителем дробной доли была запятая, а разделителем тысяч пробел (независимо от локализации)?
Пробел не обязательно, раньше без него обходились.
Но, как выяснилось, если пробел не указывать явно в формате в формуле, то вылезают другие косяки

mikekaganski

Цитата: Sirius34 от 15 февраля 2022, 15:15
Цитата: sokol92 от 15 февраля 2022, 14:40Если в ячейке A2 содержится число 1234,56 (2 знака после запятой), то формула
Ничего она не меняет, тот же самый текст получаем. А FIXED даёт ошибку.
А вот если написать 1234.56 (через точку), тогда да - TEXT приводит к 1,235

Вам же написали:

Цитата: sokol92 от 15 февраля 2022, 14:40
Если в ячейке A2 содержится число 1234,56

Заметьте: число. А не текст. Да, Владимир использовал русскую нотацию - запятая как разделитель дробной части. Предполагается, что пользователь умеет вводить дробные числа (скажем, с помощью точки на цифровой клавиатуре ;) )
С уважением,
Михаил Каганский

mikekaganski

Цитата: Sirius34 от 15 февраля 2022, 15:17
Но, как выяснилось, если пробел не указывать явно в формате в формуле, то вылезают другие косяки

Я понял, что каждое слово нужно вытягивать клещами. Начиная с первого поста никакой информации добровольно, одни загадки и предположения (начиная с неверного утверждения, что конкатенация выдаёт ошибку). И здесь то же самое - что за косяки могут вылезать при неиспользовании пробела - загадка.
С уважением,
Михаил Каганский

mikekaganski

#23
Цитата: Sirius34 от 14 февраля 2022, 15:00
Я даже и не знал про наличие проблемы, пока на одном из вновь поступивших компов с линуксом по причине какого-то
глюка во время установки (поддержка как-то проглядела) не оказалась установлена версия LO только с английским
интерфейсом (чисто технически, все файлы русского интерфейса присутствовали на диске, но исправить самостоятельно
не получилось). Комп в итоге уехал обратно в поддержку, для исправления, но ошибку в базе мы уже увидели.

Кстати, обратите внимание. Все проблемы с форматированием чисел зависят не от языка интерфейса, а от локали. Так что можно настроить и англоязычный ЛО на использование русских строк форматирования и разделителей.
С уважением,
Михаил Каганский

Sirius34

Цитата: mikekaganski от 15 февраля 2022, 15:23
Я понял, что каждое слово нужно вытягивать клещами. Начиная с первого поста никакой информации добровольно, одни загадки и предположения (начиная с неверного утверждения, что конкатенация выдаёт ошибку). И здесь то же самое - что за косяки могут вылезать при неиспользовании пробела - загадка.
Так в том и косяки: FIXED не позволяет указывать произвольный разделитель разрядов, а только берёт из локали.
TEXT позволяет указывать, но при использовании локали, отличной от русской, понимает формат по своему,
а я боюсь даже представить себе лицо сотрудницы, которая увидит, например, сумму 6510, "округленную" до 6,51.
И как ей потом объяснять эти парадоксы...
Геморрой, короче.
Русскую локаль во все ячейки с суммами я уже прописал, как отметил раньше.
Хочется верить, что проблема больше не проявится, хотя в файле каждый месяц что-то новое появляется.

Вопрос, тем не менее, актуален: как можно узнать текущую локаль LO ?

mikekaganski

Цитата: Sirius34 от 15 февраля 2022, 15:35
TEXT позволяет указывать, но при использовании локали, отличной от русской, понимает формат по своему,
И при чём тут пробел? Как именно выглядит "косяк", вызванный неиспользованием пробела в строке формата? В простом описании: "в ЛО с локалью en-US в ячейку A1 вводим число X, в ячейку A2 формулу Y1, отображается Z1, а если формула Y2 с пробелом - отображается Z2 как надо".
С уважением,
Михаил Каганский

Sirius34

Цитата: mikekaganski от 15 февраля 2022, 15:33Кстати, обратите внимание. Все проблемы с форматированием чисел зависят не от языка интерфейса, а от локали. Так что можно настроить и англоязычный ЛО на использование русских строк форматирования и разделителей.
Можно. И даже нужно. И не сложно, если знаешь - где и на что менять.
Но это легко сделать мне, а не обычному юзеру, который сидит за компом.
До сих пор помню, как по телефону, будучи в отпуске в другом регионе, не имея под рукой компа, объяснял коллеге -
как можно csv-файл с нестандартной кодировкой открыть в Linux'е для редактирования и как его потом правильно
пересохранить, чтобы по электронке его можно было отправить в нормальном виде...

Я тщу себя надеждой, что поддержка при подготовке новых компов больше не будет ошибаться. А тут была случайность.
И тем не менее, хочется обезопасить себя от даже гипотетической ситуации, раз уж она теоретически может возникнуть.

mikekaganski

Цитата: Sirius34 от 15 февраля 2022, 15:41И тем не менее, хочется обезопасить себя от даже гипотетической ситуации, раз уж она теоретически может возникнуть.

И это делается использованием шаблонов, в которых правильно настроена локаль стилей по умолчанию, а не бесконечным усложнением формул для сложной обработки возможных проблем (а Вы подумали про возможность получения системы, настроенной на хинди?) до состояния невозможности работы с такими монструозными формулами из-за того, что их понять невозможно, уже не говоря о быстродействии.
С уважением,
Михаил Каганский

Sirius34

Цитата: mikekaganski от 15 февраля 2022, 15:39
И при чём тут пробел? Как именно выглядит "косяк", вызванный неиспользованием пробела в строке формата? В простом описании: "в ЛО с локалью en-US в ячейку A1 вводим число X, в ячейку A2 формулу Y1, отображается Z1, а если формула Y2 с пробелом - отображается Z2 как надо".
Ммм... как-то в таком варианте я не пытался сформулировать, но наверное да, так и должно получаться.

Цитата: mikekaganski от 15 февраля 2022, 15:45
а Вы подумали про возможность получения системы, настроенной на хинди?
боже упаси...

Цитата: mikekaganski от 15 февраля 2022, 15:45И это делается использованием шаблонов, в которых правильно настроена локаль стилей по умолчанию
вот тут не очень понял, если честно

mikekaganski

#29
Цитата: Sirius34 от 15 февраля 2022, 15:51
Цитата: mikekaganski от 15 февраля 2022, 15:39
В простом описании: "в ЛО с локалью en-US в ячейку A1 вводим число X, в ячейку A2 формулу Y1, отображается Z1, а если формула Y2 с пробелом - отображается Z2 как надо".
Ммм... как-то в таком варианте я не пытался сформулировать

Пожалуйста, старайтесь всегда свои объяснения формулировать как-то так, чтобы читающий мог однозначно понимать Вас. Вы можете дополнительно добавлять свои предположения, описания ситуаций, но без чёткого пошагового описания "проблему можно увидеть так" понять и помочь трудно. Скажем, я предложил схему - но конкретные X, Y, Z должны вписать Вы, чтобы проблема с пробелами стала понятна (я так и не знаю, что могут исправить пробелы в формате).

Цитата: Sirius34 от 15 февраля 2022, 15:51
Цитата: mikekaganski от 15 февраля 2022, 15:45И это делается использованием шаблонов, в которых правильно настроена локаль стилей по умолчанию
вот тут не очень понял, если честно

Создаёте новый чистый документ Calc. Открываете диспетчер стилей, правите стиль по умолчанию (Default). Сохраняете файл как шаблон. Делаете этот шаблон шаблоном по умолчанию. Желательно - располагаете его на сетевом ресурсе, и все системы конфигурируете на использование его по умолчанию. И все новые документы создаются с настройками, сохранёнными в этом шаблоне (например, локаль ячеек).

И читаете документацию ;)
С уважением,
Михаил Каганский