Преобразование string в double

Стартовая страница Форумы Понять, как работает ПО Преобразование string в double

Просмотр 15 сообщений - с 1 по 15 (из 16 всего)
  • Автор
    Записи
  • #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. Формула работала в пятой версии, нужна была для преобразования сигналов от сервера (строкой идут, скада их конвертит в дабл, я их декодирую и преобразую опять в дабл, потому что скада как-то плохо справлялась с преобразованием и выводила «—«).

    #31809
    Romiros
    Участник
    #31823
    saprin8
    Участник

    При преобразовании проекта скрипты не поменялись, заменил на новые, вроде ошибка пропала, но сам скрипт StringToDouble так и не заработал для сигналов с значением кроме 0 или 1

    #31824
    saprin8
    Участник

    Вообще странно, захожу в линию связи, показывает, что коммуникатор видит значения все, в том числе и строковые (то есть «Откр» или «Закр»). Если формулу не применять, то не преобразует значение и приходит что-то типа 1е123124 * 10-³.

    #31825
    saprin8
    Участник
    public double StringToDouble(double cnlNum)
    {
    string s - DecodeAscii(cnlNum);
    return (EncodeAscii(s));
    }

    Попробовал такой вариант, тоже не работает.

    • Ответ изменён 2 года, 5 месяцев назад пользователем Mikhail.
    #31826
    a80808
    Участник

    string s — DecodeAscii(cnlNum);

    Не понял конструкцию…вы от s отнимаете DecodeAscii(cnlNum);

    Или это string s — DecodeAscii(cnlNum); со знаком минус?

    #31827
    a80808
    Участник

    DecodeAscii(cnlNum); со знаком минус разумеется )))
    копи/паст…

    #31828
    saprin8
    Участник

    Пошарил по форумам, может ли быть такое, что региональные параметры не совпадают? Получится, что идет дабл через запятую, а нужна через точку, поэтому строка и не преобразовывается. В коммуникаторе линия показывает значения через точку (45.0 например)

    • Ответ изменён 2 года, 5 месяцев назад пользователем saprin8.
    #31829
    saprin8
    Участник

    Это знак равно «=», либо промахнулся пока печатал

    #31831
    manjey73
    Участник

    Чтобы не влияла , или . надо усложнять формулу. Так и есть, из-за того, что русские региональные настройки не будет происходить парсинг числовой строки в double

    • Ответ изменён 2 года, 5 месяцев назад пользователем manjey73.
    #31835
    saprin8
    Участник

    То есть других вариантов нету? На CultureInfo ругается, мол класса такого нету. В загрузке зависимостей в логе сервера нет System.Globalization.dll. А кроме CultureInfo поменять преобразование в соответствии с региональными настройками невозможно.

    #31836
    manjey73
    Участник

    Блин, ну у вас есть входная строка, вы знаете что прилетает , — ну поменяйте вы ее на точку строковыми функциями. А уже потом парсите свое число

    • Ответ изменён 2 года, 5 месяцев назад пользователем manjey73.
    #31838
    manjey73
    Участник

    При чем Replace можно выполнять даже без проверки. Ну нет там запятой, ничего на точку и не поменяется.

    #31839
    saprin8
    Участник

    Уже пробовал Replace и ничего. В итоге заработал DecodeUnicode, вместо Ascii, которая работала раньше.

    #31842
    saprin8
    Участник

    Для тех кто столкнется с таким же:
    public double StringToDouble(double cnlNum)
    {
    string s = DecodeUnicode(cnlNum);
    return (ScadaUtils.ParseDouble(s));
    }
    Добавляете эту функцию в скрипты, во входном канале выставляете галочку на формулу, саму формулу StringToDouble(CnlVal), В случае нужды работы еще и со статусом, то StringToDouble(CnlVal); StringToDouble(CnlVal), ибо статус будет все время единица, если не использовать формулу
    DecodeUncode() есть в скриптах в strings

Просмотр 15 сообщений - с 1 по 15 (из 16 всего)
  • Для ответа в этой теме необходимо авторизоваться.