Что нового

Как преобразовать строковую переменную в числовую?

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
В скрипте узнаю некоторые значения с помощью StringRegExp и StringTrimLeft в результате получаются числа, но переменные строкового типа, оператор условия считает, что 5 < 9, 5 > 11.
Как это исправить?

Код:
MsgBox(0, '', IsInt($iEnergy))

Выдаёт 0, хотя там число получаемое функцией

Код:
$pEnergy = 0
$sContentPage = _IEDocReadHTML($oIE)
$sEnergyNotFormatted = StringRegExp($sContentPage, 'id=co_energy>.+?</DIV>', 1)
If @error = 0 Then
	$sEnergyNotFormatted = StringRegExp($sEnergyNotFormatted[0], '\d+?/', 1)
	$sEnergyNotFormatted = StringTrimRight($sEnergyNotFormatted[0], 1)
	$pEnergy = $sEnergyNotFormatted
EndIf
Return $pEnergy
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Код:
$sString = ' 9, 5 '

$sString = StringStripWS(StringReplace($sString, ',', '.'), 8)
MsgBox(0, '', Number($sString))
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
А зачем делать так ??? :

Mr. Anderson [?]
$sEnergyNotFormatted = StringRegExp($sEnergyNotFormatted[0], '\d+?/', 1)
$sEnergyNotFormatted = StringTrimRight($sEnergyNotFormatted[0], 1)

Почему не сделать так ? , (сразу избавившись от "/") :
Код:
$sEnergyNotFormatted = StringRegExp($sEnergyNotFormatted[0], '(\d+?)/', 1)



Добавлено:
Сообщение автоматически объединено:

Данное выражение исправит цифровой фрагмент
при наличии пробелов и ошибочной записи через ","
Код:
;$a=" 8. 5 "
$a=" 8, 5 "
$b=StringRegExpReplace($a,"\s*(\d*)\s*[,.]\s*(\d*)\s*","\1.\2")
ConsoleWrite($b& @LF)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
CreatoR
Код:
StringIsDigit

не поймает строки с дробной частью, типа 9.5.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Kaster [?]
не поймает строки с дробной частью
Тогда нужно совмещать с
Код:
StringIsFloat
ну или через RegExp:
Код:
MsgBox(64, 'Title', StringRegExp($iEnergy, "^[\d\.]+$"))
 

Sp01LeR

Знающий
Сообщения
45
Репутация
12
Здесь без "грязных хаков" не обойтись ;D

Код:
$str = "-1.23"
$num=Execute($str)
MsgBox(0,"NUMtype:","$num="&$num&@CRLF&"IsNumber="&IsNumber($num)&@CRLF&"IsFloat="&IsFloat($num))
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
CreatoR [?]
Тогда нужно совмещать с
мне кажется если точно знаешь, что данные числовые, то проверять особо незачем. достаточно просто преобразовывать в численный формат и делать нужные операции. я пологаю, ТС начал проверять потому что его операция сравнения давала неправильные по его взгляду результаты
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Sp01LeR
А если $str = "-1,23"?
Код:
$sString = ' 9, 5 '

$sString = StringStripWS(StringReplace($sString, ',', '.'), 8)
MsgBox(0, '', $sString & @LF & StringIsFloat($sString) & @LF & IsFloat(Number($sString)))
 
Верх