Форматы чисел. Заменить разделитель в числах при выводе.

Автор Netlog, 5 марта 2019, 10:10

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

Netlog

В ячейке F3 число вида -3,3
Надо собрать из него строку, где запятая будет заменена на точку "-3.3"
в соседней ячейке формула
TEXT(F3;"0.0")
не заменяет запятую, так и оставляет.
локаль русская.
Есть какой-то формат числа, гарантирующий вывод точки?

mikekaganski

С уважением,
Михаил Каганский

Netlog

Тысяча извинений, вроде читал справку эту, но ничего не получилось с кодом [$-411]0.0
Прикладываю файл, в котором у меня не работает код.

И второй аспект - перед положительными числами нужен +


mikekaganski

Хмм... да, это я приношу извинения. Я использовал точку в качестве десятичного разделителя в формате, хотя в моей локали десятичный разделитель - запятая; поэтому получил неправильный результат (выглядевший как было нужно). Похоже, [$-XXX] работает только в связке с [NatNumN].

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

Netlog

Задача - собрать строку sql запроса.
В нём разделитель целой и дробной части - исключительно точка и никак иначе.
Числа бывают и положительные, и отрицательные, ноль невозможен.

Попробовал исходной ячейке поставить язык Английский - США - да, отображение изменилось, теперь с точкой. Не хватает плюса перед положительным числом.
Но как только на эту ячейку ссылаешься формулой Concatenate(F3; " ") - в результате строка всё равно содержит запятую.
Раньше я эти проблемы решал через IF, разделяя отдельно целую и дробную части числа. Хотелось бы чего попроще.

rami

А в самом запросе sql не пробовали заменять запятую на точку?

REPLACE(s, replace, s2) — Заменяет все replace в строке s на s2

Netlog

В самом запросе запятых много, но сразу в преобразованном числе можно заменить.
Теперь бы ещё с плюсом перед положительными числами разобраться.

mikekaganski

#7
Самый короткий способ вывести число с десятичной точкой - похоже, этот:
=SUBSTITUTE(F3;",";".")
Но он не учитывает требования к плюсу перед числом.
Можно использовать вот это:
=SUBSTITUTE(TEXT(F3;"+0.0##########;-0.0##########");",";".")
Уточнение: в строке формата нужно использовать тот десятичный разделитель, который используется в локали ЛО. Для русской ЛО - запятая.
С уважением,
Михаил Каганский

Netlog

С реплейсом довольно громоздко.
=REPLACE(TEXT(F3;"0.00000000000");FIND(",";TEXT(F3;"0.00000000000");1);1;".")
А вот с
=SUBSTITUTE(TEXT(F3;"+0.0##########;-0.0##########");",";".")
похоже, всё нормально.
Спасибо за код формата с плюсом!

mikekaganski

С уважением,
Михаил Каганский

rami

Цитата: Netlog от  5 марта 2019, 13:20Задача - собрать строку sql запроса.
В нём разделитель целой и дробной части - исключительно точка и никак иначе.
Каким образом вы собираете строку запроса?

Netlog

примерно так:
=CONCATENATE("select top 100 [timeval] "& SUBSTITUTE(TEXT(J3;"+0.0##########;-0.0##########");",";".") &",-[numcom]       ,[idcomp]       ,[par1]       ,[par2]       ,[par3]       ,[par4]       ,[event]       ,[indexkey]       ,[razdindex]       ,[hozorgan]       ,[hozguest]       ,[remark]       ,[doorindex]       ,[mode]       ,[devicetime]       ,[vevent]       ,[zreserv]       ,[zoneindex]       ,[readerindex]       ,[sign]       ,[tprzdindex]       ,[tppar4]       ,[indexzone]       ,[tpindex]       ,newid()   from [orion16].[dbo].[plogdata]   where (razdindex = "& D3 &")   AND   (timeval > '"& TEXT(F3; "mm-dd-yyyy hh:mm:ss") &"')  AND   (timeval < '"& TEXT(G3; "mm-dd-yyyy hh:mm:ss") &"')   order by timeval")
Это пока учебный запрос, потом, примерно в том же духе из таких запросов собирается пакет примерно в тысячу запросов, и выполняется разом.
Параметры запросов уже забиты в табличке LibreOffice Calc.