Функция преобразования строки в число

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Функция преобразования строки в число

Сообщение Игорь Столяров »

Привет всем ! :)

Подскажите пожалуйста, есть ли в Clarion возможность ЯВНО преобразовать строку в число ?

Поясню, на примере.
- В строке может содержаться некое дробное число;
- Нужно найти в потоке данных строки с нулевыми значениями;
- Но возможны варианты: "", "0","0000", "0.0", ".00", "0.00", "0.000000000" и т.д.

Сейчас приходится делать идиотическое действие для неявного преобразования строки в число:

Код: Выделить всё

  If (Clip(Loc:MyString) + 1 - 1) = 0
     ! Строка содержит нулевое число
  end
А хотелось бы, что-то вроде

Код: Выделить всё

  If StringToNumber(Loc:MyString) = 0
     ! Строка содержит нулевое число
  end
Такая шалость вообще возможна ?
Заранее спасибо ! :)
За теми кто отстал - не возвращаться. (С) Кодекс
Alex_G
Бывалый
Сообщения: 61
Зарегистрирован: 09 Ноябрь 2009, 13:04
Поблагодарили: 2 раза

Функция преобразования строки в число

Сообщение Alex_G »

А вариант
IF Deformat(Loc:MyString)=0
...
end
не подходит?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Функция преобразования строки в число

Сообщение Игорь Столяров »

Alex_G писал(а): 24 Декабрь 2017, 13:43IF Deformat(Loc:MyString)=0
Неа ... :( Тут можно даже не парится со чтением описания (DEFORMAT() возвращает строку), а просто попробовать:

Код: Выделить всё

  Message(Deformat('00000'))   ! Вернёт '00000'
  Message(Deformat('000.00'))  ! Вернёт '000.00'
  и т.д.
За теми кто отстал - не возвращаться. (С) Кодекс
Ал
✯ Ветеран ✯
Сообщения: 1011
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия

Функция преобразования строки в число

Сообщение Ал »

Игорь Столяров писал(а): 24 Декабрь 2017, 13:31 Привет всем ! :)

Подскажите пожалуйста, есть ли в Clarion возможность ЯВНО преобразовать строку в число ?

Поясню, на примере.
- В строке может содержаться некое дробное число;
- Нужно найти в потоке данных строки с нулевыми значениями;
- Но возможны варианты: "", "0","0000", "0.0", ".00", "0.00", "0.000000000" и т.д.

Сейчас приходится делать идиотическое действие для неявного преобразования строки в число:

Код: Выделить всё

  If (Clip(Loc:MyString) + 1 - 1) = 0
     ! Строка содержит нулевое число
  end
А хотелось бы, что-то вроде

Код: Выделить всё

  If StringToNumber(Loc:MyString) = 0
     ! Строка содержит нулевое число
  end
Такая шалость вообще возможна ?
Заранее спасибо ! :)
:?: =CHOOSE(NUMERIC(Loc:MyString)=1 AND Loc:MyString*1=0,TRUE,FALSE)

Код: Выделить всё

...
Loc:MyString        string(255)

    CODE
    Loc:MyString = '00.00000'        
        stop(clip(Loc:MyString)& ' '&CHOOSE(NUMERIC(Loc:MyString)=1 AND Loc:MyString*1=0,TRUE,FALSE))
        
   Loc:MyString = '010.00000'        
    stop(clip(Loc:MyString)& ' '&CHOOSE(NUMERIC(Loc:MyString)=1 AND Loc:MyString*1=0,TRUE,FALSE))
     Loc:MyString = '01wd.00000'        
    stop(clip(Loc:MyString)& ' '&CHOOSE(NUMERIC(Loc:MyString)=1 AND Loc:MyString*1=0,TRUE,FALSE))    
    ...
    
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Функция преобразования строки в число

Сообщение Игорь Столяров »

Ал писал(а): 24 Декабрь 2017, 14:35CHOOSE(NUMERIC(Loc:MyString)=1 AND Loc:MyString*1=0,TRUE,FALSE)
Спасибо ! Всё очень здорово, но ...

1. Хотелось бы всё-таки упростить решение задачи, а не усложнить (см. пример в первом посте) ... ;)
2. Замена сложения на умножение приводит к погрешностям для дробей с высокой разрядностью.
(перед сравнением надо применять Round() - мы это многократно обсуждали в форуме, и тогда вообще теряется смысл) :(
За теми кто отстал - не возвращаться. (С) Кодекс
Ал
✯ Ветеран ✯
Сообщения: 1011
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия

Функция преобразования строки в число

Сообщение Ал »

Игорь Столяров писал(а): 24 Декабрь 2017, 15:14
Ал писал(а): 24 Декабрь 2017, 14:35CHOOSE(NUMERIC(Loc:MyString)=1 AND Loc:MyString*1=0,TRUE,FALSE)
Спасибо ! Всё очень здорово, но ...

1. Хотелось бы всё-таки упростить решение задачи, а не усложнить (см. пример в первом посте) ... ;)
2. Замена сложения на умножение приводит к погрешностям для дробей с высокой разрядностью.
(перед сравнением надо применять Round() - мы это многократно обсуждали в форуме, и тогда вообще теряется смысл) :(
Такая шалость вообще возможна ?
:mrgreen:
ну а про
Замена сложения на умножение приводит к погрешностям для дробей с высокой разрядностью
- слишком "научно" для меня, старого - я ж только круглый "0" ищу... :(
давно-давно -седой профессор учил - "...проверяйте экспериментально, по возможности..." - пример в контексте определения умножения "0 * 1 <> 0" могу увидеть с этой вашей
...Замена сложения на умножение приводит к погрешностям для дробей с высокой разрядностью
:?:
"простота хуже..." - ждали совсем готовое решение? - клавиатуру у вас никто не отобрал - опишите свою функцию StringToNumber() с нужными проверками/преобразованиями внутри и в путь...
речь ведь шла только про
Нужно найти в потоке данных строки с нулевыми значениями;
или я что-то не так прочитал в первом посте :nr:
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Функция преобразования строки в число

Сообщение kreator »

А ещё раз. Почему не нравится вот это:
Alex_G писал(а): 24 Декабрь 2017, 13:43 IF Deformat(Loc:MyString)=0
...
end
Вроде работает. Deformat возвращает строку, но сравнение с нулём отрабатывает правильно.
Даже вот так работает:

Код: Выделить всё

s" = '00.00000'
if s"=0
  stop('Нулевое значение = ' & deformat(s"))
else
  stop('Ненулевое значение = ' & deformat(s"))
end
We are hard at work… for you. :)
Ал
✯ Ветеран ✯
Сообщения: 1011
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия

Функция преобразования строки в число

Сообщение Ал »

да не парся, кто ищет - тот найдет свой правильный вариант...
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Функция преобразования строки в число

Сообщение Yufil »

Evaluate(String) :)
С последующей проверкой ErrorCode()
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Функция преобразования строки в число

Сообщение Игорь Столяров »

Yufil писал(а): 25 Декабрь 2017, 9:36Evaluate(String)
O ! А вот это традиционно в десятку ... Спасибо ! :)
Немного стыдно, конечно, что сам не додумался .... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить