XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
prog

offline
Опыт: 32,865
Активность:
целое или действительное число в строке?
собственно, возникла необходимость определять целое или действительное число записано в строке, а может вообще произвольный набор символов.
самый очевидный способ:
((код jass
string s
integer i = S2I(s)
real r = S2R(s)
if I2S(i)==s {
целое
}elseif R2S(r) == s {
действительное
}else{
не число
}
))
есть предложения? (кроме "не задавать глупых вопросов")
Старый 25.06.2011, 00:32
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
prog, ну так то можно так и делать, но только трабла с реалом будет, т.к. при переводе обязательно 3 знака после запятой. Поэтому надо дописывать. Очевидный пример
string s = "0.8"
real r = S2R(s) //0.8
set s = R2S(r) //0.800
Старый 25.06.2011, 00:55
J64_

offline
Опыт: 4,724
Активность:
проверяй наличие НЕ цифр, и ОДНОЙ точки. если находит точку без левых символов - действительное, с левыми - ... Левое число, иначе - целое.
Старый 26.06.2011, 07:34
prog

offline
Опыт: 32,865
Активность:
AdamanTX, все хорошо и, например, в C я бы так и сделал, но посимвольный проход по строке в варе это, мягко говоря, немного не то что мне сейчас нужно
alexprey, спасибо что напомнил - как-то забыл об этой особенности, но есть еще одна не менее неприятная возможность - R2S(S2R(".008")) == "0.008"
и еще более неприятная: R2S(S2R("-.008")) == "-0.008"
а всякие глупости вроде "01.008", "0.0001" и "+1.0" я даже учитывать не хочу
((код jass
string s
string s0
integer L
integer i = S2I(s)
real r = S2R(s)
if I2S(i) == s {
целое
}else{
s0 = s
if SubString(s,0,2) == "-."{
s = "-0."+SubString(s,2,StringLength(s))
}elseif SubString(s,0,1) == "."{
s = "0" + s
}
L = StringLength(s)
if L > 1 and SubString(R2S(r),0,L) == s {
действительное
}else{
не число
}
}
))

Отредактировано prog, 26.06.2011 в 13:18.
Старый 26.06.2011, 13:04
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
А вообще лучше делать по сл принципу. Брать 1 символ и проверять на правильность.
Например в начале может стоять любое число или -. Потом любое число или точка. и т.д.
Старый 26.06.2011, 21:22
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 18:58.