Стартовая страница › Форумы › Понять, как работает ПО › Преобразование string в double
Помечено: Double, String, преобразование строки
- В этой теме 15 ответов, 5 участников, последнее обновление 2 года, 5 месяцев назад сделано
Mikhail.
-
АвторЗаписи
-
01.04.2024 в 16:57 #31808
saprin8
УчастникПриветствую. Столкнулся с проблемой преобразования из строки в дабл. Функция:
public double StringToDouble(double cnlNum)
{
string s = DecodeAscii(cnlNum);
return (ScadaUtils.ParseDouble(s));
}
больше не работает. Теперь пишет ошибку компиляции. Identifier expected. The name ‘Parse’ does not exist in the current context. Формула работала в пятой версии, нужна была для преобразования сигналов от сервера (строкой идут, скада их конвертит в дабл, я их декодирую и преобразую опять в дабл, потому что скада как-то плохо справлялась с преобразованием и выводила «—«).01.04.2024 в 17:12 #31809Romiros
УчастникПосмотрите здесь
EncodeAscii(s)02.04.2024 в 08:22 #31823saprin8
УчастникПри преобразовании проекта скрипты не поменялись, заменил на новые, вроде ошибка пропала, но сам скрипт StringToDouble так и не заработал для сигналов с значением кроме 0 или 1
02.04.2024 в 08:31 #31824saprin8
УчастникВообще странно, захожу в линию связи, показывает, что коммуникатор видит значения все, в том числе и строковые (то есть «Откр» или «Закр»). Если формулу не применять, то не преобразует значение и приходит что-то типа 1е123124 * 10-³.
02.04.2024 в 08:46 #31825saprin8
Участникpublic double StringToDouble(double cnlNum) { string s - DecodeAscii(cnlNum); return (EncodeAscii(s)); }Попробовал такой вариант, тоже не работает.
-
Ответ изменён 2 года, 5 месяцев назад пользователем
Mikhail.
02.04.2024 в 09:56 #31826
a80808Участникstring s — DecodeAscii(cnlNum);
Не понял конструкцию…вы от s отнимаете DecodeAscii(cnlNum);
Или это string s — DecodeAscii(cnlNum); со знаком минус?
02.04.2024 в 09:57 #31827
a80808УчастникDecodeAscii(cnlNum); со знаком минус разумеется )))
копи/паст…02.04.2024 в 09:59 #31828saprin8
УчастникПошарил по форумам, может ли быть такое, что региональные параметры не совпадают? Получится, что идет дабл через запятую, а нужна через точку, поэтому строка и не преобразовывается. В коммуникаторе линия показывает значения через точку (45.0 например)
-
Ответ изменён 2 года, 5 месяцев назад пользователем
saprin8.
02.04.2024 в 10:00 #31829saprin8
УчастникЭто знак равно «=», либо промахнулся пока печатал
02.04.2024 в 10:21 #31831
manjey73УчастникЧтобы не влияла , или . надо усложнять формулу. Так и есть, из-за того, что русские региональные настройки не будет происходить парсинг числовой строки в double
-
Ответ изменён 2 года, 5 месяцев назад пользователем
manjey73.
02.04.2024 в 11:58 #31835saprin8
УчастникТо есть других вариантов нету? На CultureInfo ругается, мол класса такого нету. В загрузке зависимостей в логе сервера нет System.Globalization.dll. А кроме CultureInfo поменять преобразование в соответствии с региональными настройками невозможно.
02.04.2024 в 12:19 #31836
manjey73УчастникБлин, ну у вас есть входная строка, вы знаете что прилетает , — ну поменяйте вы ее на точку строковыми функциями. А уже потом парсите свое число
-
Ответ изменён 2 года, 5 месяцев назад пользователем
manjey73.
02.04.2024 в 12:23 #31838
manjey73УчастникПри чем Replace можно выполнять даже без проверки. Ну нет там запятой, ничего на точку и не поменяется.
02.04.2024 в 13:51 #31839saprin8
УчастникУже пробовал Replace и ничего. В итоге заработал DecodeUnicode, вместо Ascii, которая работала раньше.
02.04.2024 в 14:46 #31842saprin8
УчастникДля тех кто столкнется с таким же:
public double StringToDouble(double cnlNum)
{
string s = DecodeUnicode(cnlNum);
return (ScadaUtils.ParseDouble(s));
}
Добавляете эту функцию в скрипты, во входном канале выставляете галочку на формулу, саму формулу StringToDouble(CnlVal), В случае нужды работы еще и со статусом, то StringToDouble(CnlVal); StringToDouble(CnlVal), ибо статус будет все время единица, если не использовать формулу
DecodeUncode() есть в скриптах в strings -
Ответ изменён 2 года, 5 месяцев назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.