powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Преобразование чисел
13 сообщений из 13, страница 1 из 1
Преобразование чисел
    #32344916
PBWriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть строка вида "1,0", может быть и "1.0"
В локальных настройках разделитель стоит ".", но мне надо преобразовать эту строку в число независимо от региональных настроек и при этом проверить точно ли это число. Функции PB преобразования и проверку осуществляют на основе региональных настроек. Подскажите, плз, идею!
...
Рейтинг: 0 / 0
Преобразование чисел
    #32344978
Механик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чём проблемма-то?

[quote]String ls_str2, ls_1, ls_2, ls_d
Integer li_pos

ls_d = '.'
li_pos = pos(as_str, '.')
if li_pos<1 then
li_pos = pos(as_str, ',')
ls_d = ','
end if
if li_pos<1 then Return as_str

ls_1 = left(as_str, li_pos - 1)
ls_2 = right(as_str, len(as_str) - li_pos)
ls_str2 = String(Long(ls_1) + long(ls_2)/(10^len(ls_2)))[/quote]

Return ls_str2
...
Рейтинг: 0 / 0
Преобразование чисел
    #32345053
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Механик подумай а если строка "1,2,3" или "1.2.3", то весь скрипт твой полная лажа это во-первых, а во-вторых как заметил PBWriter - функция типа IsNumber - зависит от локальных настроек (если '.' ) то IsNumber("12,3") - вернет False и наоборот, вот так вот...
PBWriter - напиши как по подробней где ты это использаешь (хочешь использовать) лучше со скриптом...
Башка у меня щас не варит...
Потом посомтрю, может отвечу, да и не только я ...
...
Рейтинг: 0 / 0
Преобразование чисел
    #32345099
PBWriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так было до тех пор, пока не всплыла проблема с разными локальными настройками:

DO
i++
li_read_result = FileRead(li_FileNum, ls_current_line)
LOOP UNTIL (i>5000) OR (li_read_result > 0)

IF li_read_result = -100 THEN EXIT
CHOOSE CASE ls_field CASE '<label>'
ls_reference = ls_current_line
CASE '<labsize>'
IF IsNumber (ls_current_line) THEN
ld_msgsize = Dec(ls_current_line)
ELSE
MessageBox('ОШибка', 'Ошибка чтения размера сообщения'+ ls_filename + '.' + ls_ext+' '+ ls_current_line)
FileClose(li_FileNum)
RETURN -1
END IF
END CHOOSE
...
Рейтинг: 0 / 0
Преобразование чисел
    #32345136
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Прошу прощения, совсем отупел я написал следующее:
авторIsNumber - зависит от локальных настроек брет все это, я чего то закрутился еще раз всех меня извенить за дизо :-))
PBWriter - тебе мой совет замени в твоей строке все ',' на '.' и попробуй применить IsNumber - если число вернет точно True иначе False...

Замена что то -
//Поиск первого вхождения
ll_Start = Pos(ls_Source,',')
Do While ll_Start > 0
// Замена нового на старое
as_Source = Replace(as_Source,ll_Start,1,'.')
// Поиск последующего вхождения
ll_Start = Pos(ls_Source,',',(ll_Start+1))
Loop

Еще раз извините :-))
...
Рейтинг: 0 / 0
Преобразование чисел
    #32345177
PBWriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так а как я узнаю, когда надо ".", а когда "," ставить???? Нужно же знать региональные настройки.
...
Рейтинг: 0 / 0
Преобразование чисел
    #32345185
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Да какая разница, какие региональные настройки - если '.', то замены не произойдет и IsNumber вернет True и Dec нормально конвертнет, если ',', то все запятые заменятся и если полученная строка число - то IsNumber вернет True и Dec нормально конвертнет.
Чего здесь непонятного то?
...
Рейтинг: 0 / 0
Преобразование чисел
    #32345290
У нас есть специнтерпретатор, переводящий строки в числа (вычисляя выражения в строках), минуя Pb :-)
Возьми архив на
http://www.oviont.com/detail.php?sid=66&id=55
Глобальная внешняя функция MDEvaluate, библиотека mflib.dll
Объявление:
FUNCTION double MDEvaluate(string exprl) LIBRARY "MFLib.DLL"
Если ошибка в формуле, возвращает 1E+308, иначе результат.
...
Рейтинг: 0 / 0
Преобразование чисел
    #32345304
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

IMHO, достаточно одной замены. Если в строке более одного разделителя, то это точно не число
...
Рейтинг: 0 / 0
Преобразование чисел
    #32345311
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Raven A - ну ты умница, ой удивил ...
Я просто выдрал кусок программы, кой чего убрал (функция была глобальной замены ряда символов на другой в строке) и заменил для человека строку на символ ',', чтоб было понятно :-)).
Ну все устал я сегодня, скороко конец рабочего дня...
ПИВО НАША СОВЕСТЬ, УМ, ЧЕСТЬ, ВСЕ В ПОРЯДКЕ ЕСЛИ ПИВО ЕСТЬ!!!
...
Рейтинг: 0 / 0
Преобразование чисел
    #32345313
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>PBWriter
По поводу определения региональной настройки
if Dec('1.23') < 1.23 then gs_Delim=',' else gs_Delim='.'
...
Рейтинг: 0 / 0
Преобразование чисел
    #32345333
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
Чегой то я туплю...
А действительно региональные настройки влияют на результат выполнения функций IsNumber и Dec...
Мда...
Всем извинить за флейм...
Пошел я домой...
...
Рейтинг: 0 / 0
Преобразование чисел
    #32346027
PBWriter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To>> Антон
Антон, так как на работе ZIP-файлы закарыты для скачивания, то я посмотрю Вашу библиотеку завтра. Уверен, что именно она поможет мне решить проблемы. Спасибо.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Преобразование чисел
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (7): Анонимы (6), Yandex Bot 1 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]