Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 1,2 > Приведение типов


Автор: AlDev 21.3.2006, 06:36
Как вам такой прикол:
Код

var str_num:String = '046';
trace (str_num);
trace (Number(str_num)); 


Унадайте, что будет в output? 046, 46?
А вот фиг. Получаем:
Код

046
38


Кстати, подобный прикол идет с любыми числами, в String начинающимися с нулей.

Пробуем через конструктор Number:
Код

trace (new Number(str_num)); 

и получаем опять не то, что надо…

теперь попробуем parseInt:
Код

trace (parseInt(str_num)); 

И опять не то!

Закономерный вопрос: почему? и как бороться?
Ответ просто до банальности smile Числа, начинающиеся с 0, воспринимаются как 8-ричные.
Итак, дабы правильно приводить данные числа, используем:
Код

var str_num:String = '046';
trace (parseInt(str_num,10)); 

или parseFloat:
Код

var str_num:String = '046';
trace (parseFloat(str_num)); 

©ам допер
http://batsuev.com/wp/2006/03/21/flash-8-string-number/

Автор: Maksys 21.3.2006, 20:35
Респект тебе... я бы так сразу не допер.

Автор: szz 22.3.2006, 10:34
Да что-ж тут допирать, ребята? Вы классикой программирования не увлекаетесь? Это ж традиция синтаксиса, появившаяся еще в конце 60-х. Так записываются числа в С: с нуля - восьмеричные, с 0х - шестнадцатеричные. Для меня это так же наглядно и очевидно, как, например слова "for", "while" или "if-else" smile

Они в С даже подсвечиваются по-разному:
Код

int a = 123;
int b = 0123;
int c = 0x123;

Добавлено @ 10:35
ага, что-то не подсветились smile тут подсветчик С++ упрощенный smile

Автор: AlDev 22.3.2006, 10:48
ну да, просто я выдирал дробную часть числа и долго сидел и тупил, почему работает не так, как должно smile

Автор: Maksys 24.3.2006, 18:47
Цитата(szz @ 22.3.2006, 13:34)
Да что-ж тут допирать, ребята? Вы классикой программирования не увлекаетесь? Это ж традиция синтаксиса, появившаяся еще в конце 60-х. Так записываются числа в С: с нуля - восьмеричные, с 0х - шестнадцатеричные.  Для меня это так же наглядно и очевидно, как, например слова "for", "while" или "if-else" smile

Они в С даже подсвечиваются по-разному:
Код

int a = 123;
int b = 0123;
int c = 0x123;

Добавлено @ 10:35
ага, что-то не подсветились smile тут подсветчик С++ упрощенный  smile

а я ваще тока 123 пользуюсь редко когда 0х123, а 0123 ваще не юзаю, даже в байсике smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)