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 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J64_
offline
Опыт:
4,724Активность: |
проверяй наличие НЕ цифр, и ОДНОЙ точки. если находит точку без левых символов - действительное, с левыми - ... Левое число, иначе - целое. |
26.06.2011, 07:34 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
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 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alexprey
познающий Unity
offline
Опыт:
68,501Активность: |
А вообще лучше делать по сл принципу. Брать 1 символ и проверять на правильность.
Например в начале может стоять любое число или -. Потом любое число или точка. и т.д. |
26.06.2011, 21:22 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|