|
Преобразование чисел
|
|||
---|---|---|---|
#18+
Есть строка вида "1,0", может быть и "1.0" В локальных настройках разделитель стоит ".", но мне надо преобразовать эту строку в число независимо от региональных настроек и при этом проверить точно ли это число. Функции PB преобразования и проверку осуществляют на основе региональных настроек. Подскажите, плз, идею! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 14:47 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
А в чём проблемма-то? [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 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 15:09 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
Механик подумай а если строка "1,2,3" или "1.2.3", то весь скрипт твой полная лажа это во-первых, а во-вторых как заметил PBWriter - функция типа IsNumber - зависит от локальных настроек (если '.' ) то IsNumber("12,3") - вернет False и наоборот, вот так вот... PBWriter - напиши как по подробней где ты это использаешь (хочешь использовать) лучше со скриптом... Башка у меня щас не варит... Потом посомтрю, может отвечу, да и не только я ... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 15:43 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
Так было до тех пор, пока не всплыла проблема с разными локальными настройками: 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 16:01 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
Прошу прощения, совсем отупел я написал следующее: автор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 Еще раз извините :-)) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 16:18 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
Так а как я узнаю, когда надо ".", а когда "," ставить???? Нужно же знать региональные настройки. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 16:33 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
Да какая разница, какие региональные настройки - если '.', то замены не произойдет и IsNumber вернет True и Dec нормально конвертнет, если ',', то все запятые заменятся и если полученная строка число - то IsNumber вернет True и Dec нормально конвертнет. Чего здесь непонятного то? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 16:36 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
У нас есть специнтерпретатор, переводящий строки в числа (вычисляя выражения в строках), минуя Pb :-) Возьми архив на http://www.oviont.com/detail.php?sid=66&id=55 Глобальная внешняя функция MDEvaluate, библиотека mflib.dll Объявление: FUNCTION double MDEvaluate(string exprl) LIBRARY "MFLib.DLL" Если ошибка в формуле, возвращает 1E+308, иначе результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 17:34 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
>Я IMHO, достаточно одной замены. Если в строке более одного разделителя, то это точно не число ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 17:43 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
Raven A - ну ты умница, ой удивил ... Я просто выдрал кусок программы, кой чего убрал (функция была глобальной замены ряда символов на другой в строке) и заменил для человека строку на символ ',', чтоб было понятно :-)). Ну все устал я сегодня, скороко конец рабочего дня... ПИВО НАША СОВЕСТЬ, УМ, ЧЕСТЬ, ВСЕ В ПОРЯДКЕ ЕСЛИ ПИВО ЕСТЬ!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 17:51 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
>PBWriter По поводу определения региональной настройки if Dec('1.23') < 1.23 then gs_Delim=',' else gs_Delim='.' ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 17:51 |
|
Преобразование чисел
|
|||
---|---|---|---|
#18+
Чегой то я туплю... А действительно региональные настройки влияют на результат выполнения функций IsNumber и Dec... Мда... Всем извинить за флейм... Пошел я домой... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2003, 18:03 |
|
|
Start [/forum/topic.php?fid=15&tid=1339386&gotonew=1]: |
0ms |
get settings: |
1ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
25ms |
get topic data: |
6ms |
get first new msg: |
1ms |
get forum data: |
0ms |
get page messages: |
21ms |
update_topic_read_status (1339386): 08.12.2003 10:03:36: |
0ms |
get tp. blocked users: |
0ms |
get online users: |
40ms |
check new: |
1ms |
others: | 92ms |
total: | 195ms |
0 / 0 |