Что нового

[Баг] Странная работа функции StringIsFloat() с некоторыми рус. буквами после точки.

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Насколько я понимаю, функция StringIsFloat($sString) должна возвращать 1 если в $sString присутствуют только цифры и одна точка.
Следующий код возвращает у меня 1 в каждой первой строке MsgBox:
Код:
Dim $aRusFloat[10] = [9, '12.ц', '23.ы', '34.ч', '45.р', '56.т', '67.я', '78.м', '89.и', '91.ь']
Dim $aRusNotFloat[10] = [9, '12.ф', '23.в', '34.й', '45.п', '56.о', '67.ш', '78.з', '89.д', '91.ю']
For $i = 1 To $aRusFloat[0]
	MsgBox(64, $i, 'StringIsFloat(' & $aRusFloat[$i] & ') = ' & StringIsFloat($aRusFloat[$i]) & @CRLF & _
			'StringIsFloat(' & $aRusNotFloat[$i] & ') = ' & StringIsFloat($aRusNotFloat[$i]), 2)
Next

Абослютно одинаковый результат у меня получился при проверке на 3-х Windows XPx32 и на 1-ой Windows 7х64.
Получается, что девять русских букв StringIsFloat() принимает за цифры.
Это баг или что?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,487
madmasles [?]
Получается, что девять русских букв StringIsFloat() принимает за цифры.
На самом деле больше, вот так можно проверить:

Код:
For $i = 192 To 255
	$vFloat = $i & '.' & Chr($i)
	ConsoleWrite('StringIsFloat(' & $vFloat & ') = ' & StringIsFloat($vFloat) & @LF)
Next


Видимо бага, почему именно эти буквы, понять пока не удаётся...
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
CreatoR
Как не печально, но получается, что функция StringIsFloat() в нынешнем виде абсолютно бесполезна для русскоязычных всех пользователей. Жаль.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,487
madmasles [?]
получается, что функция StringIsFloat() в нынешнем виде абсолютно бесполезна для русскоязычных всех пользователей. Жаль.
Можно использовать RegExp:

Код:
Func _StringIsFloat($vString)
	Return StringRegExp($vString, '\A(\d+\.\d*|\d*\.\d+)\z')
EndFunc
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
CreatoR
Спасибо.
У меня было нечто подобное, но у Вас, как всегда, изящнее. :IL_AutoIt_1:
 
Верх